2017-06-09 4 views
1

私は以下の単純な例が恥ずかしいほど醜いことを知っています...それで、なぜ私はそれを世界と共有するために来たのですか?Python:関数のパラメータとして指定された別のクラスのメソッドを呼び出す

clsからクラスメソッドを呼び出し、特定のメソッドをcallmethodに指定したいと考えています。

class cls(object): 
    def __init__(self, var1): 
     self.var1 = var1 
    def method1(self): 
     return self.var1 ** 2 
    def method2(self): 
     return self.var1 ** 3 

def callmethod(method, var1): 
    methods = {'method1' : cls(var1).method1(), 
       'method2' : cls(var1).method2() 
       } 
    return methods[method] 

callmethod('method1', 2) 
Out[56]: 4 

現物に各メソッドの文字列形式をリンク(おそらく大と面倒な)辞書を作成することなく、このことについて移動する方法はありますか?あなたが探しているもの

+0

のためのシンタックスシュガーとしてa.bと考えることができ、私はちょうどその辞書の必要性を否定するでしょうgetattr' '使用することを意味実際の例と抽象的な例がまったくどのようにつながっているかわかりません。 –

+2

[operator.methodcaller](https://docs.python.org/3/library/operator.html#operator.methodcaller) – wwii

答えて

2

がちょうどそうです:

def callmethod(method, arg) 
    inst = cls(arg) 
    return getattr(inst, method)() 

あなたはgetattr(a, "b")

+2

またはgetattr(a、 "b")を関数/動的な方法として考える'ab'をする:P –