在C++中为Python类指定静态变量
在Python的类里,怎么才能定义一个静态方法或者静态变量呢?这个问题是在CPython的C++代码中提出来的。
在PyTypeObject这个结构体里,tp_getset、tp_methods和tp_members这些看起来都是针对类的实例(也就是对象)来设计的。
非常感谢,
Rob。
1 个回答
2
在tp_methods
中可以定义静态方法和类方法,只需要在PyMethodDef
结构的ml_flags
字段中添加METH_STATIC
或METH_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
中,就像其他类属性一样。