在C++中为Python类指定静态变量

4 投票
1 回答
1094 浏览
提问于 2025-04-17 05:40

在Python的类里,怎么才能定义一个静态方法或者静态变量呢?这个问题是在CPython的C++代码中提出来的。

在PyTypeObject这个结构体里,tp_getset、tp_methods和tp_members这些看起来都是针对类的实例(也就是对象)来设计的。

非常感谢,

Rob。

1 个回答

2

tp_methods中可以定义静态方法和类方法,只需要在PyMethodDef结构的ml_flags字段中添加METH_STATICMETH_CLASS。这就相当于使用@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中,就像其他类属性一样。

撰写回答