【问题标题】:Static Variables in Python C APIPython C API 中的静态变量
【发布时间】:2010-03-03 19:32:38
【问题描述】:

如何公开这样的“静态”变量

class MyClass:
    X = 1
    Y = 2

通过 C API? PyTypeObject 上唯一看起来可以工作的变量是 tp_members,但我在 PyMemberDef 中没有看到任何标志表明该成员应该是每个类,而不是每个实例。

为了更清楚一点,因为它可能会改变答案,我试图将 C 枚举暴露给 Python,以便枚举

enum MyFlags {
    Alpha = 0,
    Beta = 1
};

可以在 Python 中访问为:

module.MyFlags.Alpha
module.MyFlags.Beta

【问题讨论】:

  • 我自己找到答案后才发现这个 SO 问题。在此之前,我搜索了诸如“cpython 类常量”之类的东西。我想知道我们是否可以在这个问题上添加更多的词来帮助其他人找到它。

标签: python python-c-api


【解决方案1】:

只需将它们放在类型的tp_dict 例如PyDict_SetItemString

【讨论】:

  • 太棒了!这就是我一直在寻找的。 (如果我在将其标记为已回答之前花点时间测试一下,请原谅我。)
  • 按广告宣传。 :) 再次感谢。
  • 自最初发布此答案以来,文档中已添加以下警告:“警告: 使用 PyDict_SetItem() 或以其他方式修改是不安全的tp_dict 与字典 C-API。"
  • 认为警告比应有的范围更广 - 只要名称没有任何对应的名称,就可以在 tp_dict 中设置条目插槽(所以没有设置 __add____new__ 或类似的东西)然后你在类型上调用 PyType_Modified
猜你喜欢
  • 2012-09-30
  • 2014-12-25
  • 2011-04-11
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多