【问题标题】:How can I create a static variable in a Python class via the C API?如何通过 C API 在 Python 类中创建静态变量?
【发布时间】:2009-12-23 11:59:20
【问题描述】:

我想做相当于

class Foo(object):
  bar = 1

使用 Python 的 C API。换句话说,我想使用 C 创建一个具有静态变量的 Python 类。

我该怎么做?

【问题讨论】:

    标签: python c


    【解决方案1】:

    找到了!只需设置类型对象的 tp_dict 元素并为每个静态变量填充添加条目即可。以下 C 代码创建与上面 Python 代码相同的静态变量:

    PyTypeObject type;
    // ...other initialisation...
    type.tp_dict = PyDict_New();
    PyDict_SetItemString(type.tp_dict, "bar", PyInt_FromLong(1));
    

    【讨论】:

      【解决方案2】:

      您可以使用适当的标志将该源代码传递给Py_CompileString

      如果你已经有课程,你可以使用PyObject_SetAttr

      【讨论】:

      • 感谢您的建议!不过,这样做似乎有点迂回——有什么类似于 PyModule_AddIntConstant 的类吗?
      • 抱歉,我刚刚注意到您更新了答案。再次感谢您的帮助。我尝试过使用 PyObject_SetAttr,但无论何时调用它,我都会收到 TypeError 消息“无法设置内置/扩展类型 X 的属性”(其中 X 是我的类型名称)。我做错了什么,或者这根本不适用于类型对象?
      • 我最终找到了我想要的解决方案。非常感谢您的建议!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 2018-08-18
      • 2012-01-08
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      相关资源
      最近更新 更多