Python API C++:Type对象的"静态变量"

ThR*_*R37 5 c++ python api static wrapper

我有一个关于静态变量和TypeObjects的小问题.我使用API​​ C来包装一个c ++对象(我们称之为Acpp),它有一个名为x的静态变量.让我们调用我的TypeObject A_Object:

typedef struct {
  PyObject_HEAD
  Acpp* a;
} A_Object;
Run Code Online (Sandbox Code Playgroud)

TypeObject作为"A"附加到我的python模块"myMod".我已经定义了getter和setter(tp_getset),以便我可以从python访问和修改Acpp的静态变量:

>>> import myMod
>>> myA1 = myMod.A(some args...)
>>> myA1.x = 34 # using the setter to set the static variable of Acpp
>>> myA2 = myMod.A(some other args...)
>>> print myA2.x
34
>>> # Ok it works !
Run Code Online (Sandbox Code Playgroud)

这个解决方案有效,但并不是真的"干净".我想通过使用TypeObject而不是实例来访问python中的静态变量:

>>> import myMod
>>> myMod.A.x = 34 # what I wish...
Run Code Online (Sandbox Code Playgroud)

有人有想法帮助我吗?

提前致谢.

jch*_*chl 1

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

考虑到这一点,您可能会发现此线程很有趣。它只讨论了这个问题的Python级别的解决方案,而不是C扩展类型,但它涵盖了基本原理。

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