Python高阶--自定义属性访问
可自定义下列方法对类实例属性访问(t.name的使用、赋值或删除)的具体含义
object.__getattr__(self, name)
当默认属性访问因失败时而引发AttributeError而调用__getattr__()方法,如:调用__getattribute__()时由于name不是一个实例属性或self的类关系树中的属性而引发了AttributeError;或者是对name属性调用__get__()时引发了AttributeError。__getattr__()方法就会返回(找到的)属性值或是返回引发的AttributeError异常。注意:若属性是通过正常机制找到的,__getattr__就不会被调用

object.__getattribute__(self, name)
此方法是会无条件被调用以实现对类实例属性的访问。若类还定义了__getattr__(),则__getattr__()就不会被调用,除非是__getattribute__()显示地调用它或是引发了AttributeError,__getattr__()方法就会返回(找到的)属性值或是返回引发的AttributeError异常;为了避免此方法的无线递归,我们都是调用具有相同名称的基类方法来访问所需的任何属性,如:object.__getattribute__(self, name)

object.__setattr__(self, name,value)
此方法在一个属性被尝试赋值时调用,这个调用会取代正常机制(即将值保存到实例字典)。name为属性名称,value为要赋给属性的值。
如果__setattr__()想要赋值给一个实例属性,它应该调用同名的基类方法,例如:object.__setattr__(self, name, value)


浙公网安备 33010602011771号