簡體   English   中英

如何在Python中實現__slots__?

[英]How is __slots__ implemented in Python?

  • 如何在Python中實現__slots__
  • 這是暴露在C接口
  • 在通過PyTypeObject在C中定義Python類時,如何獲得__slots__行為?

在創建Python類時,它們默認具有__dict__ ,您可以在它們上設置任何屬性。 插槽的要點是不創建__dict__來節省空間。

在C接口中,它是另一種方式,擴展類默認沒有__dict__ ,而你顯然必須添加一個並添加getattr / setattr支持來處理它(雖然幸運的是已有方法, PyObject_GenericGetAttrPyObject_GenericSetAttr ,所以你不必實現它們,只需使用它們。(有趣的是,沒有PyObject_GenericDelAttr,但我不確定那是什么。(我應該停止嵌套括號,如此(或不)))) 。

因此,擴展類型不需要插槽也沒有意義。 默認情況下,您只需讓getattr / setatttr方法只訪問該類具有的屬性。

至於它是如何實現的,代碼在typeobject.c中 ,它幾乎只是一個問題“如果對象有一個__slots__屬性,不要創建一個__dict__ 。相當令人__dict__ 。:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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