2011-08-20 4 views
8

呼び出されたメソッドと同じクラスにある別のメソッドから名前を渡してメソッドを実行するにはどうすればよいですか?このように:python変数のメソッド名

class Class1: 
    def __init__(self): 
     pass 
    def func1(self, arg1): 
     # some code 
    def func2(self): 
     function = getattr(sys.modules[__name__], "func1") # apparently this does not work 

どのようなご提案ですか?

答えて

9

getattr(self, "func1")?また、例えば、名前機能

を使用しないよう:

>>> class C: 
... def f1(self, arg1): print arg1 
... def f2(self): return getattr(self, "f1") 
... 
>>> x=C() 
>>> x.f2()(1) 
1 
+0

あなたが望む方法を知っているなら、それをつかむだけで 'getattr'を使う理由はありません。 –

5

あなたはクラスではなく、モジュールから属性を取得する必要があります。

def func2(self): 
    method = getattr(self, "func1") 
    method("arg") 

でも、呼び出し可能であることを確認する必要があります。

if callable(method): 
    method("arg") 

これは、期待していないものを呼び出すことを避けるでしょう。呼び出し可能でない場合は、ここで独自の例外を発生させることができます。

+0

ありがとうございます – Shaokan

+0

メソッドの名前を知っていれば 'getattr'は不要です。また、呼び出し可能かどうかチェックするのはなぜですか?どちらかといえば(それがメソッドの場合は)、例外を発生させます。これはエラーを処理する適切な方法です。 –

+2

@おそらく名前は変数になりますが、これは単なる例です。 getattrはメソッドだけでなく、あらゆる種類の属性を返すことができるため、呼び出し可能なチェックはコードの1行でエラーを回避し、インテントがより明確になります。 – Keith

関連する問題