gpt4 book ai didi

python - 如何从 C++ 在 Python 中定义静态类属性?

转载 作者:行者123 更新时间:2023-12-01 14:59:11 26 4
gpt4 key购买 nike

我想知道如何从 C++ 为 Python 定义一个静态类变量?等效的 Python 代码如下:

class foo:
bar = int

我在定义类型时尝试使用 tp_getset 字段,但事实证明它不起作用并返回 getset_descriptor在 Python 中,在实例上调用时它不起作用(AttributeError)。此外,Python 文档说直接操作 tp_dict使用 C API 是不安全的。但它并没有说明使用什么来代替。 (见 here)

我特意选了 int在示例中,因为我在其中引用了其他一些类,如果这很重要的话。

最佳答案

tp_getset定义 descriptors对于一个类型;当通过 __getattribute__ 访问时,描述符绑定(bind)到实例。 hook,所以不适合定义类属性。

您可以通过在 PyTypeObject.tp_dict object 上设置属性来为类添加属性。对于类型;在模块的初始化函数( PyInit_<modulename> )中这样做,例如,在使用 PyType_Ready() 完成类型之后(确保 tp_dict 对象存在):

PyObject *d;
PyObject *bar;

d = PyFoo_Type.tp_dict;

bar = PyLong_FromLong(42);
if (bar == NULL || PyDict_SetItemString(d, "bar", bar) < 0)
return NULL;
Py_DECREF(bar);

这是未经测试的 C 代码;我对 C++ 不够熟悉,无法自信地为您提供 C++ 版本。

如果您想查看真实示例,请参阅 datetime module ,其中 datetime.min , datetime.max等。类属性被设置。

关于python - 如何从 C++ 在 Python 中定义静态类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133021/

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