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