gpt4 book ai didi

c++ - Python API C++ : "Static variable" for a Type Object

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:45 25 4
gpt4 key购买 nike

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

typedef struct {
PyObject_HEAD
Acpp* a;
} A_Object;

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 !

此解决方案有效,但并不真正“干净”。我想通过使用 TypeObject 而不是实例来访问 python 中的静态变量:

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

有没有人有想法帮助我?

提前致谢。

最佳答案

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

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

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

关于c++ - Python API C++ : "Static variable" for a Type Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com