Python API C++:Type Obj的“静态变量”

2024-06-26 14:56:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个关于静态变量和类型对象的小问题。 我使用API C包装一个C++对象(我们称之为Acpp),它有一个名为x的静态变量。 我们称我的TypeObject为_Object:

typedef struct {
  PyObject_HEAD
  Acpp* a;
} A_Object;

TypeObject作为“A”附加到python模块“myMod”。我定义了getter和setters(tp getset),这样我就可以从python访问和修改Acpp的静态变量:

^{pr2}$

这个解决方案可行,但并不真正“干净”。我想使用TypeObject而不是实例来访问python中的静态变量:

>>> import myMod
>>> myMod.A.x = 34 # what I wish...

有人有办法帮我吗?在

提前谢谢。在


Tags: 模块对象api类型定义object静态head
2条回答

本质上,你要做的就是定义一个“静态属性”。也就是说,您希望在获取/设置类的属性时调用函数。在

记住这一点,您可能会发现this thread很有趣。它只讨论了这个问题的Python级解决方案,而不是C扩展类型,但它涵盖了基本原则。在

要实现该线程中为C扩展类型提出的解决方案,我认为您必须初始化tp_dict,并为“x”添加一个条目,该条目的值是适当实现__get__的对象。在

您可以在a_对象中添加一个虚拟的'x'字段并创建一对set/get方法。当您访问虚拟的“x”字段时,该方法会将调用重定向到静态“x”字段。在

相关问题 更多 >