簡體   English   中英

為什么自定義Python類實例的`__dict__`屬性是該類的描述符,而不是實例的實際屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM