类的内置attr属性
1.__getattr__:当调用对象属性不存在时,才会触发
class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(self, item): print('执行__getattr__') f1=Foo(10) print(f1.y) #10 print(getattr(f1,'y')) #10 len(str)--->str.__len__() f1.sssssssss #执行__getattr__
2.__delattr__:删除时会触发
class Foo: x=1 def __init__(self,y): self.y=y def __delattr__(self, item): print('删除操作__delattr__') f1=Foo(10) print(f1.__dict__) #{'y': 10} del f1.y #删除操作__delattr__ del f1.x #删除操作__delattr__ print(f1.__dict__) #{'y': 10}
3.__setattr__:设置属性时就会触发
class Foo: x=1 def __init__(self,y): self.y=y def __setattr__(self, key, value): print('__setattr__执行') # self.key=value #不能这样写,会进入递归,无限循环,报错 self.__dict__[key]=value f1=Foo(10) #__setattr__执行 print(f1.__dict__) #{'y': 10} f1.z=2 #__setattr__执行 print(f1.__dict__) #{'y': 10, 'z': 2}