簡體   English   中英

如何使用python通過字符串名稱調用方法?

[英]How do i call a method by a string name using 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!

沒有函數被調用,我缺少什么?

蓋特

您的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

也許是題外話,但也許您的清單實際上是字典:

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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM