在werkzeug,我们看到:
printf()
那么,我可以使用class Local(object):
__slots__ = ('__storage__', '__ident_func__')
def __init__(self):
object.__setattr__(self, '__storage__', {})
替换self.__storage__ = {}
,为什么?
答案 0 :(得分:2)
同一个类定义了一个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__
属性。