Mat*_*ner 12 python descriptor python-c-api slots python-3.x
__slots__在Python中实现?__slots__在C中定义Python类时如何获得行为PyTypeObject?Len*_*bro 17
创建Python类时,默认情况下它们有一个__dict__,您可以在它们上设置任何属性.插槽的要点是不创建__dict__节省空间.
在C接口它的其他方式,扩展类没有默认__dict__,你反而会明确需要增加一个,并添加GETATTR/SETATTR支持,以处理它(虽然幸运的是有这种方法已经,PyObject_GenericGetAttr并且PyObject_GenericSetAttr,让你不必实现它们,只需使用它们.(有趣的是,没有PyObject_GenericDelAttr,但我不确定那是什么.(我应该停止嵌套括号,如此(或不)))).
因此,扩展类型不需要插槽也没有意义.默认情况下,您只需让getattr/setatttr方法只访问该类具有的属性.
至于它是如何实现的,代码在typeobject.c中,它几乎只是一个问题"如果对象有一个__slots__属性,不要创建一个__dict__.相当令人兴奋.:-)
| 归档时间: |
|
| 查看次数: |
1146 次 |
| 最近记录: |