类的内置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}

 

posted @ 2019-03-26 18:36  wind_y  阅读(183)  评论(0编辑  收藏  举报