2010-05-28 54 views
0

我有以下課程;如何通過使用python的字符串名稱調用方法?

class myStringMethod(): 
    def __init__(self): 
     self.func_list= [('func1','print_func1()'),('func2','print_func2()')] 

    def print_func1(self, name): 
     print name 

    def print_func2(self, name): 
     print name 

    def call_func_by_name(self): 
     for func in self.func_list: 
      getattr(self, func[1])('Func Name') 

if __name__=='__main__': 
    strM = myStringMethod() 
    strM.call_func_by_name() #Nothing prints out! 

沒有函數被調出,我錯過了什麼?

迦特

回答

3

self.func_list應該是:

self.func_list= [('func1','print_func1'),('func2','print_func2')] 

而且你編寫代碼的方式會,當然,打印'Func Name'。我想你可能打算在那裏通過func[0]

工作例如:

>>> class myStringMethod(): 
    def __init__(self): 
     self.func_list= [('func1','print_func1'),('func2','print_func2')] 

    def print_func1(self, name): 
     print(name) 

    def print_func2(self, name): 
     print(name) 

    def call_func_by_name(self): 
     for func in self.func_list: 
      getattr(self, func[1])('Func Name') 

>>> myStringMethod().call_func_by_name() 
Func Name 
Func Name 
+0

仍然沒有得到函數稱爲 – gath 2010-05-28 15:20:46

+0

@gath:對我的作品,看看我的編輯。 – SilentGhost 2010-05-28 15:22:08

+0

@gath也適用於我。 – 2010-05-28 18:48:42

0

或許offtopic,但也許你的名單實際上是一個字典:

self.functs = {'func1':'print_func1', ...} 

,然後用撥打:

for fn in self.functs.values() : self.__dict__[fn]('Func Name') 

或者即使你想調用你班級的所有'func_'功能(這裏沒有func_list):

@classmethod 
def call_func_by_name(cls) 
    for n,f in cls.__dict__.values() : 
    if n.startswith('print_') and hasattr(f,'__call__'): f('Hello') 
相關問題