我设计了一个类。它非常标准,具有一些方法属性
class foo:
def f1(self):
print 'f1'
def f2(self):
print 'f2'
....
def fn(self):
print 'fn'
现在我想创建一个包含一组 foo 实例的类。
class bar:
self.myfoos=[foo(),foo(),foo()]
然后我想上课f1..fn
所有 foo 实例上的方法。
我可以做:
class bar:
...
def f1():
for foo_ in self.myfoos:
foo_.f1()
然而,我的清单f1..fn
很长,那么我怎样才能以简洁的方式获得这种行为?也许完全采用替代设计?
你可以直接实施__getattr__
并将该调用委托给列表foos
。我确信有一种更优雅的方法可以做到这一点:
class foo:
def f1(self):
print('f1')
def f2(self):
print('f2')
class bar:
def __init__(self):
self.foos = [foo() for _ in range(3)]
def __getattr__(self, fn):
def fns(*args, **kwargs):
for f in self.foos:
getattr(f, fn)(*args, **kwargs)
return fns
In []:
b = bar()
b.f1()
Out[]
f1
f1
f1
In []:
b.f2()
Out[]:
f2
f2
f2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)