[英]How is __slots__ implemented in Python?
在創建Python類時,它們默認具有__dict__
,您可以在它們上設置任何屬性。 插槽的要點是不創建__dict__
來節省空間。
在C接口中,它是另一種方式,擴展類默認沒有__dict__
,而你顯然必須添加一個並添加getattr / setattr支持來處理它(雖然幸運的是已有方法, PyObject_GenericGetAttr
和PyObject_GenericSetAttr
,所以你不必實現它們,只需使用它們。(有趣的是,沒有PyObject_GenericDelAttr,但我不確定那是什么。(我應該停止嵌套括號,如此(或不)))) 。
因此,擴展類型不需要插槽也沒有意義。 默認情況下,您只需讓getattr / setatttr方法只訪問該類具有的屬性。
至於它是如何實現的,代碼在typeobject.c中 ,它幾乎只是一個問題“如果對象有一個__slots__
屬性,不要創建一個__dict__
。相當令人__dict__
。:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.