我正在尝试使用“C”代码扩展Python 2.7.x.
我知道我可以使用
创建一个模块Py_InitModule(char *name, PyMethodDef *methods)
这适用于向模块添加方法。
我想在我使用Py_InitModule()
创建的模块中添加一个字符串。
如何添加成员变量,例如name = "my_module"
或idx=5
?
谢谢!
答案 0 :(得分:2)
扩展和嵌入文档的Extending Python with C or C++一章中有一个概述和示例。如果您想手动编写扩展模块,那么您真的需要阅读。参考详细信息主要在C-API文档的Module Objects章节中。
虽然模块对象是完全正常的对象,并且您始终可以使用PyModule_GetDict
或PyObject_SetAttr
来访问它们的dict,但有一些特殊功能可以使这更容易。最常见的方法是在模块init函数中构造对象,就像在任何地方构造任何Python对象一样,然后调用PyModule_AddObject
:
将对象添加到模块作为名称。这是一个便利功能,可以从模块的初始化功能中使用。这会窃取对值的引用。错误时返回-1,成功时返回0。
对此的一个主要变化是将对象存储在static
中并过度引用它以便永远不会删除它。请参阅SpamError
章节中的Extending
示例。
但是对于您的具体示例,您只是尝试添加一个字符串常量,这更容易,因为有甚至是特定的函数来添加本机类型的常量:
PyMODINIT_FUNC
initspam(void) {
PyObject *mod = Py_InitModule("spam", SpamMethods);
if (!mod) return;
if (PyModule_AddStringConstant(mod, "mystring", "This is my string") == -1) return;
}