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

Posted

技术标签:

【中文标题】在 C++ 中的 python 类中指定静态变量【英文标题】:specify static variables in a python class in C++ 【发布时间】:2011-11-04 21:44:35 【问题描述】:

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

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

非常感谢, 抢。

【问题讨论】:

查看***.com/questions/68645/…的答案 docs.python.org/extending/extending.html 第一个链接不引用 C++,而第二个链接不引用 python 类中的静态变量。我缺少的这些链接中是否有与我的问题相关的内容?谢谢 让你的问题有点清楚。可以举个例子来说明你想要什么...... 在 CPython 中,您可以通过设置 PyTypeObject 结构来使用新类型等扩展 python。在这个结构中似乎没有任何方法可以定义静态方法和变量,只有常规方法和变量(tp_getset、tp_methods、tp_members 等)。 【参考方案1】:

可以在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 中,就像使用其他类属性一样。

【讨论】:

以上是关于在 C++ 中的 python 类中指定静态变量的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 文件流中复制静态变量

final关键字的使用

为啥我需要在 Swift 的类中指定变量的类型?

C++ 问题...定义不能识别声明中指定的向量

C++ STL删除vector中指定元素

是否可以在变量 CLOB 中的执行代码中指定另一个 CLOB (JSON) 中的值