在 CPython C++ 中,如何在 python 类中指定静态方法或变量?
在 PyTypeObject 结构中,tp_getset、tp_methods、tp_members 似乎都假定了类的一个实例。
非常感谢,罗布。
静态和类方法可以tp_methods
通过添加METH_STATIC
或定义METH_CLASS
到结构的ml_flags
字段中PyMethodDef
。这相当于@staticmethod
和@classmethod
装饰器。
方法的第一个参数,通常是实例指针,NULL
用于静态方法和PyTypeObject*
类方法。
http://docs.python.org/c-api/structures.html#PyMethodDef
tp_dict
可以通过在调用之前将 设置为具有这些属性的字典来添加类属性PyType_Ready()
(在您的模块初始化函数中)。或者tp_dict
可以留下,因为NULL
在这种情况下PyType_Ready()
将为您创建字典。然后可以将属性添加到该字典。
http://docs.python.org/c-api/typeobj.html#tp_dict
计算类属性需要一个描述符类,就像在 Python 中一样。然后应将描述符的实例tp_dict
与其他类属性一样添加到 中。