描述器
描述器
描述器是一个具有“绑定行为”的对象属性,该对象的属性访问通过描述器协议覆盖:__get__(),__set__(),__delete__(),
如果一个对象定义这些方法中的任何一个,它就被称为一个描述器;
class Filed: # 一个类中,只要定义了下面这三个方法中的任意一个就被称为描述器 def __get__(self, instance, owner): pass def __set__(self, instance, value): pass def __delete__(self, instance): pass
一个简单的描述器应用例子:
class Filed: def __get__(self, instance, owner): # owner:是添加描述器属性的类,在这里为:Model类 # 访问描述器属性时,此方法被触发 print("触发描述器的__get__方法") return self.value def __set__(self, instance, value): # 设置描述器属性时,此方法被触发 # self:描述器对象,在这里为:Filed() # instance:调用描述器对象的实例对象,在这里为:Model() # value:属性值,在这里为:100 print("触发描述器的__set__方法") self.value = value def __delete__(self, instance): # 删除描述器属性时,此方法被触发 print("触发描述器的__delete__方法") self.value = None class Model: name = "yeweiyin" attr = Filed() # 描述器对象,会覆盖类属性的相关操作(get-->getattr/getattribute,set--->setattr,delete--->delattr) m = Model() m.attr = 100 # 触发描述器Filed()的__set__()方法 print(m.attr) # 触发描述器Filed()的__get__()方法 del m.attr # 触发描述器Filed()的__delete__()方法 print(m.attr) 执行结果: 触发描述器的__set__方法 触发描述器的__get__方法 100 触发描述器的__delete__方法 触发描述器的__get__方法 None