[英]Why is `__dict__` attribute of a custom Python class instance a descriptor of the class, instead of an actual attribute of the instances?
從https://stackoverflow.com/a/44880260/156458
請注意,自定義Python類實例的
__dict__
屬性是一個描述符 ; 實例本身不具有屬性,而是提供它的類(因此,type(instance).__dict__['__dict__'].__get__(instance)
被返回)。object.__dict__
可能存在,但object.__dict__['__dict__']
不存在。
為什么自定義Python類實例的__dict__
屬性是該類的描述符,而不是實例的實際屬性?
誘人地說__dict__
必須是一個描述符,因為將其實現為__dict__
條目將需要您先找到__dict__
然后才能找到__dict__
,但是Python在查找其他屬性時已經繞過了常規屬性查找來找到__dict__
,因此不像最初聽起來那么吸引人。 如果在每個__dict__
中將描述符替換為'__dict__'
鍵,則仍然可以找到__dict__
。
通過在每個__dict__
中都沒有'__dict__'
鍵,可以節省一些空間,但這不是主要原因。 由於不必設置'__dict__'
鍵,還節省了時間,而由於沒有創建循環引用而節省了時間和空間,這些好處確實不錯,但它們可能比下一件事情要小。
要求__dict__
作為描述符的最大事情是處理重新分配或刪除對象的__dict__
嘗試。 如果通過__dict__
鍵對__dict__
進行屬性查找,則重新分配someobj.__dict__
將重新分配dict鍵,而不會更改Python實際查找someobj
的屬性的字典。 __dict__
需要是一個描述符,以便它與Python查找對象的dict的實際C級結構槽保持同步。
因為是允許實例具有自定義屬性的屬性。 通常在其中存儲實例的新自定義屬性。 有些法術是需要避免循環引用(你不會想查找__dict__
實例上找到__dict__
該實例)。 類描述符是兩種Python機制之一,可以為實例屬性查找提供這種魔力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.