class Foo: def __set__(selfsself,instance, value): print("set") def __get__(self, instance, owner): print("get")
class Foo: def __get__(self, instance, owner): print("get")
class Foo: def __get__(self, instance, owner): #这里的instance是实例对象b1,owner是类Bar print("===>get方法") return instance.__dict__[‘x‘] def __set__(self, instance, value): #这里的instance是实例对象b1,value是传入的值 print("===>set方法") instance.__dict__[‘x‘] = value def __delete__(self, instance): print("===>delete方法") instance.__dict__.pop(‘x‘) class Bar: x = Foo() #将x 全权给Foo类代理,此时 x 就是描述符 def __init__(self, n): self.x = n b1 = Bar(10) print(b1.__dict__) print(b1.x) del b1.x print(b1.__dict__) b1.x = 222222222 print(b1.__dict__) b1.y = 2222 print(b1.__dict__)
class Foo: def __get__(self, instance, owner): #这里的instance是实例对象b1,owner是类Bar print("===>get方法") # return instance.__dict__[‘x‘] def __set__(self, instance, value): #这里的instance是实例对象b1,value是传入的值 print("===>set方法") # instance.__dict__[‘x‘] = value def __delete__(self, instance): print("===>delete方法") # instance.__dict__.pop(‘x‘) class Bar: x = Foo() def __init__(self, n): self.x = n b1 = Bar(10) print(Bar.__dict__) #这里打印字典看出:x 是一个对象 Bar.x = 10 print(Bar.x) print(Bar.__dict__) #当Bar.x为x后,直接覆盖了描述符的操作
class Foo: def __get__(self, instance, owner): #这里的instance是实例对象b1,owner是类Bar print("===>get方法") # return instance.__dict__[‘x‘] def __set__(self, instance, value): #这里的instance是实例对象b1,value是传入的值 print("===>set方法") # instance.__dict__[‘x‘] = value def __delete__(self, instance): print("===>delete方法") # instance.__dict__.pop(‘x‘) class Bar: x = Foo() def __init__(self, n): self.x = n b1 = Bar(10) b1.x = 10 #可以看出。用实例为变量赋值时,直接触发数据描述符 print(b1.__dict__)
class Foo: def __get__(self, instance, owner): #这里的instance是实例对象b1,owner是类Bar print("===>get方法") # return instance.__dict__[‘x‘] # def __set__(self, instance, value): #这里的instance是实例对象b1,value是传入的值 # print("===>set方法") # # instance.__dict__[‘x‘] = value # def __delete__(self, instance): print("===>delete方法") # instance.__dict__.pop(‘x‘) class Bar: x = Foo() def __init__(self, n): self.x = n b1 = Bar(10) b1.x = 10 #可以看出。用实例为变量赋值时,没有触发非数据描述符 print(b1.__dict__)
class Foo: def __get__(self, instance, owner): #这里的instance是实例对象b1,owner是类Bar print("===>get方法") # return instance.__dict__[‘x‘] # def __set__(self, instance, value): #这里的instance是实例对象b1,value是传入的值 # print("===>set方法") # # instance.__dict__[‘x‘] = value # def __delete__(self, instance): print("===>delete方法") # instance.__dict__.pop(‘x‘) class Bar: x = Foo() def __init__(self, n): self.x = n def __getattr__(self, item): print("qaq") b1 = Bar(10) b1.yyyy #当查找的属性不存在时
原文:https://www.cnblogs.com/dabai123/p/11630584.html