类中的内置方法

__getattr__:如果对象属性不存在会触发

class A:
    def __init__(self,name):
        self.name = name
    def __getattr__(self, item):
        print('我被调用了')
ret = A('wanglan')
print(ret.name)
ret.s  #s属性不存在

结果:
wanglan
我被调用了
View Code

__delattr__:删除对象属性时会触发

class A:
    def __init__(self,name):
        self.name = name
    def __delattr__(self, item):
        print('我被调用了')
ret = A('wanglan')
print(ret.name)
del ret.name

结果:
wanglan
我被调用了
View Code

__setattr__ :增加对象属性是会触发

class A:
    def __init__(self,name):
        self.name = name
    def __setattr__(self, key, value):
        print('我被调用了')
        #self.key = value #会进入死循环
        self.__dict__[key]=value
ret = A('wanglan')
print(ret.__dict__)
ret.age = 18
print(ret.__dict__)

结果:
我被调用了
{'name': 'wanglan'}
我被调用了
{'name': 'wanglan', 'age': 18}
View Code
原文地址:https://www.cnblogs.com/wanglan/p/9592878.html