在工具中,我们看到:
class Local(object):
__slots__ = ('__storage__', '__ident_func__')
def __init__(self):
object.__setattr__(self, '__storage__', {})
所以,我可以使用self.__storage__ = {}
来取代object.__setattr__(self, '__storage__', {})
,为什么?
同一个类定义了一个custom __setattr__
method,用于存储self.__storage__
中的值:
def __setattr__(self, name, value):
ident = self.__ident_func__()
storage = self.__storage__
try:
storage[ident][name] = value
except KeyError:
storage[ident] = {name: value}
但是,您首先需要设置一个初始空字典,因此object.__setattr__
方法用于绕过自定义字典。
如果您要使用self.__storage__ = {}
,那么将调用上面的自定义方法,这将导致属性错误,因为self.__storage__
尚不存在。或者更确切地说,它会导致无限递归问题,因为custom __getattr__
method将被反复调用以解决丢失的__storage__
属性。