我正在使用类装饰器来装饰另一个类。
装饰器的目的是设置一些将被复制到装饰类的配置(任意数据)。
我希望每次实例化装饰的class A
时装饰器class B
都会运行。
代码的输出清楚地显示class A
充当单例,只是实例化并调用一次,第一次实例化装饰类。
我更喜欢在整个过程中使用类装饰器,因为它们比函数装饰器更容易阅读和理解。如果功能装饰器可能是解决此问题的更好解决方案的原因,那就足够了。
感谢。
class A(object):
def __init__(self, description):
print 'init A'
self.description = description
def __call__(self, decorated):
print 'call A'
for attr, val in vars(self).iteritems():
setattr(decorated, attr, val)
return decorated
@A('Arbitrary stuff')
class B(object):
pass
if __name__ == '__main__':
b = B()
print b.description
c = B()
print c.description
init A
call A
Arbitrary stuff
Arbitrary stuff
init A
call A
Arbitrary stuff
init A
call A
Arbitrary stuff