__getattr__(self, name) 定义当用户试图获取一个不存在的属性时的行为 : 当访问对象的时name属性时,若name属性不存在,会自动调用__getattr__。如果存在,则不会调用__getattr__方法,而是直接返回name属性
__getatribute__(self, name) 定义当该类的属性被访问时的行为 当访问对象的name属性时,无论name存不存在都会调用该方法
__setattr__(self, name, value) 定义当一个属性被设置时的行为 当试图给对象的name属性进行赋值的时候调用
__delattr__(self, name) 定义当一个对象被删除时的行为
上述四个方法中除了__getattr__以外,均可用help(object. )的方式查询帮助,但是__getattr__怎样查询还不太知道
只要重写这四个魔法方法我们就可以控制对对象的属性访问了
这其中的三个方法和前面的getattr, setattr, delattr 是有区别的,一个由双下划,一个没(愣了几分钟才反应过来,囧)
前面的参见:http://blog.csdn.net/sinat_41104353/article/details/79250415
>>> class C:
def __getattribute__(self, name):
print("getattribute")
return super().__getattrbute__(name) #为了不影响原来__getattribute__功能的使用,故调用基类的__getattribute__
def __getattr__(sel