class Foo: x=1 def __init__(self,y): self.y=y def __getattr__(self, item): print(‘----->from getattr,你找到的属性不存在‘) def __setattr__(self, key, value): print(‘----> from setttr‘) #self.key=value #self.key又会去调用__setattr__()方法,这样就无限递归了 if type(value) is str: self.__dict__[key]=value #应该用操作底层字典的方法 else: print(‘只能接受字符串‘) def __delattr__(self, item): print(‘---->from delattr‘) # del self.item #同样会去调用__delattr__()方法,无限递归 self.__dict__.pop(item) print(dir(Foo)) f1=Foo(10) print(f1.z) #只有属性不存在时触发__getattr__ f1.c=‘aa‘ #设置属性是会触发__setattr__ print(f1.__dict__) del f1.c #删除属性会触发__delattr__
Python基础26类-内置函数__setattr__,__getattr__,__delattr__
原文:https://www.cnblogs.com/josie930813/p/10452840.html