2016-12-09 7 views
0

内の文字列名から関数を呼び出す:私は、私はそれがしたいnameの値をチェックする必要はありません私は、次の2つのクラス持つオブジェクト

x= B() 
x.caller("call") # I want to have caller() invoke call() on the name. 

class A(object): 
    def caller(self,name): 
     # want to invoke call() here when name="call" 

class B(A): 
    def call(self): 
     print("hello") 

は以下を考慮し自動的に与えられた文字列を自己の関数として呼び出す。

答えて

2

使用__getattribute__

class A(object): 
    def caller(self,name): 
     self.__getattribute__(name)() 

class B(A): 
    def call(self): 
     print("hello") 

x= B() 
x.caller("call") 

出力

hello 
+0

ああありがとうKenji;) – MarMan29

+1

どうして 'getattr(self、name)()'? –

1

もevalの

class A(object): 
    def caller(self,name): 
     eval('self.%s()' % name) 


class B(A): 
    def call(self): 
     print("hello") 


x= B() 
x.caller("call") 

出力

ハロー [仕上がりIを使用することができますn] 0.630]

+0

こんにちはランディーはこれより速いですか? – MarMan29

関連する問題