1
为什么这项工作:制作__dict__ A楼盘
class Bunch(dict):
def __init__(self, *args, **kwargs):
super(Bunch, self).__init__(*args, **kwargs)
self.__dict__ = self
b = Bunch()
b["a"] = 1
print(b.a)
尽管有一个循环引用:
import sys
print(sys.getrefcount(b))
# ref count is 3 when normally it is 2
但不是这样的:
class Bunch(dict):
@property
def __dict__(self):
return self
b = Bunch()
b["a"] = 1
b.a
# raises AttributeError
虽然__dict__
是一个属性的最在外观上,有一些特殊的行为正在幕后实施,而这些行为正在绕过这一局面描述符逻辑由property
创建。
想想'self .__ dict__ = self'。显然,*不能等同于'self .__ dict __ ['__ dict__'] = self',对吗?所以'self .__ dict__'一定是神奇的。 – Kevin
@OferSadan:不,功能与否无关紧要,无论如何它不是第二个例子中的功能。 – user2357112