class worker:
def foo(self):
pass
def foo1(self):
pass
def foo2(self)
pass
工作者实例将具有多个foo*
格式成员函数(foo*
函数的数量未知,因为它是由其他开发人员提供的。如何编写函数来调用所有工作者的foo *当用户添加新的foo *函数时,没有修改它的成员函数?
我可以通过调用dir()
获取所有工作者实例函数名列表,但是它的元素是str,我无法通过字符串值来运行工作器实例。我怎么能解决这个问题?
答案 0 :(得分:3)
使用getattr()
function从实例访问任意属性。使用dir()
function列出类的所有(继承)属性。结合这些使得:
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()
我在这里使用callable()
function来确保该属性确实是一种方法。
快速演示:
>>> 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