首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用"C“扩展Python2.7-添加PyObject成员变量

使用"C“扩展Python2.7-添加PyObject成员变量
EN

Stack Overflow用户
提问于 2018-06-14 06:47:54
回答 1查看 307关注 0票数 1

我正在尝试用"C“代码扩展Python2.7.x。

我知道我可以使用以下命令创建一个模块

代码语言:javascript
复制
Py_InitModule(char *name, PyMethodDef *methods)

这可以很好地将方法添加到模块中。

我想在使用Py_InitModule()创建的模块中添加一个字符串。如何添加成员变量,如name = "my_module"idx=5

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 07:14:53

在扩展和嵌入文档的Extending Python with C or C++章节中有一个概述和示例。如果你想手动编写扩展模块,你真的需要阅读这本书。参考细节主要在C-API文档的Module Objects章节中。

虽然模块对象是完全正常的对象,您可以始终使用PyModule_GetDict访问它们的dict,或者只是使用PyObject_SetAttr访问它们,但有一些特殊的函数可以使这一点变得更容易。最常见的方法是在模块初始化函数中构造对象,就像在任何地方构造任何Python对象一样,然后调用PyModule_AddObject

将对象作为名称添加到模块中。这是一个方便的函数,可以在模块的初始化函数中使用。这窃取了对值的引用。错误时返回-1,成功时返回0。

这方面的一个主要变化是将对象存储在static中,并对其进行过度计数,使其永远不会被删除。请参阅Extending一章中的SpamError示例。

但是对于您的特定示例,您只是尝试添加一个字符串常量,这要容易得多,因为有一些更特殊的函数用于添加本机类型的常量:

代码语言:javascript
复制
PyMODINIT_FUNC
initspam(void) {
    PyObject *mod = Py_InitModule("spam", SpamMethods);
    if (!mod) return;
    if (PyModule_AddStringConstant(mod, "mystring", "This is my string") == -1) return;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50847363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档