4

在 CPython C++ 中,如何在 python 类中指定静态方法或变量?

在 PyTypeObject 结构中,tp_getset、tp_methods、tp_members 似乎都假定了类的一个实例。

非常感谢,罗布。

4

1 回答 1

2

静态和类方法可以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与其他类属性一样添加到 中。

于 2011-11-05T03:10:04.527 回答