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