繁体   English   中英

__setattr__类装饰器python

[英]__setattr__ class decorator python

我正在使用类装饰器,但我不明白setattr的 set属性如何,这是我的代码:

def cldecor(*par):
    def onDecorator(aClass):
        class wrapper:
            def __init__(self, *args): 
                self.wrapped = aClass(*args)
            def __getattr__(self, name): 
                return getattr(self.wrapped, name)
            def __setattr__(self, attribute, value): 
                if attribute == 'wrapped': 
                    self.__dict__[attribute] = value 
                else:
                    setattr(self.wrapped, attribute, value)
        return wrapper
    return onDecorator


@cldecor('data','size')
class Doubler:
    def __init__(self,label,start):
        self.label = label
        self.data = start

    def display(self):
        print('{0} => {1}'.format(self.label, self.data))

但是当我这样做时:

if __name__ == "__main__":
    X = Doubler('X is ', [1,2,3])
    X.xxx = [3,4,9]
    print(X.xxx)
    X.display()

我有这个输出:

[3, 4, 9]
X is  => [1, 2, 3]

我该如何做才能得到这个输出?

[3, 4, 9]
X is  => [3, 4, 9] 

您的display方法仅打印self.data的数据,但是您已经创建了一个属性为xxx的属性。 当然display不显示它。 这有效:

>>> X.data = [3,4,9]
>>> X.display()
X is  => [3, 4, 9]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM