如何调用Python实例';是否按其成员函数名指定了非特定方法?

如何调用Python实例';是否按其成员函数名指定了非特定方法?,python,function,member,Python,Function,Member,worker实例将具有多个foo*格式成员函数(由于其他开发人员提供了foo*函数,因此其数量未知)。当用户添加新的foo*函数时,如何编写一个函数来调用所有worker的foo*成员函数而不进行修改 我可以通过调用dir()获取所有工作实例函数名列表,但它的元素是str,我无法仅通过字符串值来运行工作实例。如何解决此问题?使用访问实例中的任意属性。使用列出类上的所有(继承的)属性。组合这些属性可以: class worker: def foo(self): pass

worker实例将具有多个
foo*
格式成员函数(由于其他开发人员提供了
foo*
函数,因此其数量未知)。当用户添加新的foo*函数时,如何编写一个函数来调用所有worker的foo*成员函数而不进行修改

我可以通过调用
dir()
获取所有工作实例函数名列表,但它的元素是str,我无法仅通过字符串值来运行工作实例。如何解决此问题?

使用访问实例中的任意属性。使用列出类上的所有(继承的)属性。组合这些属性可以:

class worker:
    def foo(self):
        pass
    def foo1(self):
        pass
    def foo2(self)
        pass
我使用了here来确保属性确实是一个方法

快速演示:

foo_attributes = [attr for attr in dir(instance) if attr.startswith('foo')]
for name in foo_attributes:
    attr = getattr(instance, name)
    if callable(attr):
        attr()

你需要这样做是为了什么?我想写一个测试框架,当其他人导入模块时,该子模块将根据需要编写许多测试用例。然后该模块将尝试调用所有foo*函数
>>> class worker:
...     def foo(self):
...         print "Called foo"
...     def foo1(self):
...         print "Called foo1"
...     def foo2(self):
...         print "Called foo2"
... 
>>> instance = worker()
>>> foo_attributes = [attr for attr in dir(instance) if attr.startswith('foo')]
>>> for name in foo_attributes:
...     attr = getattr(instance, name)
...     if callable(attr):
...         attr()
... 
Called foo
Called foo1
Called foo2