2019年9月8日 描述符,代理

class Foo:
    def __set__(self, instance, value):#由于Foo代理x,所以触发了set方法
        print('set方法',instance,value)#instance传递的就是 b1
        instance.__dict__['x']=value#底层实现赋值,如果没有这句,那么b1.__dict__ 打印出来就是空。

class Bar:
    x=Foo()#Foo() 代理了x
    def __init__(self,n):
        self.x=n

b1=Bar(10)
b1.x=22
print(b1.x)
print(b1.__dict__)

》》》

set方法 <__main__.Bar object at 0x02D90A30> 10
set方法 <__main__.Bar object at 0x02D90A30> 22
22
{'x': 22}

猜你喜欢

转载自www.cnblogs.com/python1988/p/11488464.html