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