c++ - 在 C++ 的 python 类中指定静态变量

标签 c++ python class static cpython

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

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

非常感谢, 罗布。

最佳答案

通过将METH_STATICMETH_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/

相关文章:

c# - 是否有任何工具可以用随机数据填充类属性?

c++ - 比较 C 和 C++ 中的结构

c++ - 将较小的整数类型分配给较大的整数类型会不安全吗?

c++ - 如何确定 float 的上限和下限?

c++ - 声明空堆栈的最有效方法是什么?

python - Pandas 将数据框写入其他 postgresql 模式

python - 如何使用Conda共享一组python模块

c++ - 使用 pthread 创建 mandelbrot 图像

python - 在目录python中搜索具有相同名称的所有文件

class - 如何设置类中介值并将其传递给 esb