繁体   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