面向对象中特殊的方法

示例

'''
class Foo(object):
    def __init__(self):
        self.storage = {}
        #上面代码想在对象中设置一个storage = {},但是上面语法执行完之后还没有进行创建,因为它要执行__setattr__方法进行创建,
        #但执行上面代码会触发类中__setattr__方法调用self.storage,这时会报错,因为此时对象中没有storage属性,进入了一个死循环

    def __setattr__(self, key, value):
        print(self.storage)

obj = Foo()
obj.xx = 123  #直接调用父类object中的__setattr__方法
'''
'''
    AttributeError: 'Foo' object has no attribute 'storage'
'''

###############################解决方式如下###################################

class Foo(object):
    def __init__(self):
        self.storage = {}
        object.__setattr__(self,'storage',{})  #执行obj = Foo()会触发__init__方法,走到这一句代码后调用父类__setattr__方法,
        # 即在父类object设置了storage = {}

    def __setattr__(self, key, value):
        print(key,value)

obj = Foo()  #这一句执行完后打印结果 storage {}
obj.xx = 123 #执行到这一句时会触发Foo类中的__setattr__方法  xx 123


'''
    storage {}
    xx 123
'''
原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13233806.html