我正在尝试用"C“代码扩展Python2.7.x。
我知道我可以使用以下命令创建一个模块
Py_InitModule(char *name, PyMethodDef *methods)
这可以很好地将方法添加到模块中。
我想在使用Py_InitModule()
创建的模块中添加一个字符串。如何添加成员变量,如name = "my_module"
或idx=5
谢谢!
发布于 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
示例。
但是对于您的特定示例,您只是尝试添加一个字符串常量,这要容易得多,因为有一些更特殊的函数用于添加本机类型的常量:
PyMODINIT_FUNC
initspam(void) {
PyObject *mod = Py_InitModule("spam", SpamMethods);
if (!mod) return;
if (PyModule_AddStringConstant(mod, "mystring", "This is my string") == -1) return;
}
https://stackoverflow.com/questions/50847363
复制相似问题