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__