Python类装饰器只调用一次,而不是每次装饰类都实例化

时间:2017-03-15 11:32:52

标签: python class decorator instantiation python-decorators

什么?

我正在使用类装饰器来装饰另一个类。

为什么?

装饰器的目的是设置一些将被复制到装饰类的配置(任意数据)。

有什么问题?

我希望每次实例化装饰的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

0 个答案:

没有答案