__getattr__:如果对象属性不存在会触发
class A: def __init__(self,name): self.name = name def __getattr__(self, item): print('我被调用了') ret = A('wanglan') print(ret.name) ret.s #s属性不存在 结果: wanglan 我被调用了
__delattr__:删除对象属性时会触发
class A: def __init__(self,name): self.name = name def __delattr__(self, item): print('我被调用了') ret = A('wanglan') print(ret.name) del ret.name 结果: wanglan 我被调用了
__setattr__ :增加对象属性是会触发
class A: def __init__(self,name): self.name = name def __setattr__(self, key, value): print('我被调用了') #self.key = value #会进入死循环 self.__dict__[key]=value ret = A('wanglan') print(ret.__dict__) ret.age = 18 print(ret.__dict__) 结果: 我被调用了 {'name': 'wanglan'} 我被调用了 {'name': 'wanglan', 'age': 18}