Python基础26类-内置函数__setattr__,__getattr__,__delattr__

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__

猜你喜欢

转载自www.cnblogs.com/josie930813/p/10452840.html