在 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_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
中,就像使用其他类属性一样。
【讨论】:
以上是关于在 C++ 中的 python 类中指定静态变量的主要内容,如果未能解决你的问题,请参考以下文章