gpt4 book ai didi

python - __slots__ 在 Python 中是如何实现的?

转载 作者:太空狗 更新时间:2023-10-29 17:44:29 25 4
gpt4 key购买 nike

  • 怎么样__slots__用 Python 实现?
  • 这是否暴露在 C interface 中? ?
  • 如何通过 PyTypeObject 在 C 中定义 Python 类时获得 __slots__ 行为? ?

最佳答案

当创建 Python 类时,它们默认有一个 __dict__ 并且您可以在它们上设置任何属性。插槽的要点是不创建 __dict__ 以节省空间。

在 C 接口(interface)中,它是另一种方式,扩展类默认没有 __dict__,您需要明确地添加一个并添加 getattr/setattr 支持来处理它(虽然幸运的是已经有用于此的方法,PyObject_GenericGetAttrPyObject_GenericSetAttr,因此您不必实现它们,只需使用它们即可。(有趣的是,没有 PyObject_GenericDelAttr,不过,我我不确定那是关于什么的。(我可能应该停止像这样(或不)嵌套括号))。

插槽因此不需要,对于扩展类型也没有意义。默认情况下,您只需让 getattr/setattr 方法仅访问该类具有的那些属性。

至于如何实现,代码在typeobject.c ,这几乎只是一个问题“如果对象具有 __slots__ 属性,请不要创建 __dict__。非常平淡。:-)

关于python - __slots__ 在 Python 中是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com