class Foo(object):
def __init__(self):
# 1. 用父类object的__setattr__写没有问题,因为是调用object里的__setattr__,所以Foo里的__setattr__不会执行,也就没有递归了
# 2. 这样以后,Foo()对象也有storage变量了,是一个{}。
object.__setattr__(self, 'storage', {})
# 3. 如果这样写会无限递归,看到对象.xx就会调用__setattr__,而这里的__setattr__里面也有对象.xx,就一直调用__setattr__
# self.storage = {}
def __setattr__(self, key, value):
self.storage = {'k1':'v1'}
print(key,value)
#self.__dict__[key] = value
def __getattr__(self, item):
print(item)
return 'df'
def __delattr__(self, item):
# self.__dict__.pop(item)
obj = Foo()
# obj.x = 123 由__setattr__ magic function实现
# 对象.xx 由__getattr__ magic function实现