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

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

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

非常感谢, 抢。

【问题讨论】:

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

标签: c++ python class static cpython


【解决方案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 中,就像使用其他类属性一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多