如何通过 C-API 向我的模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,因为文档说这是可能的。
PyObject *mymod = Py_InitModule("my", NULL);
一次添加我的方法的函数的名称是什么。
如何通过 C-API 向我的模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,因为文档说这是可能的。
PyObject *mymod = Py_InitModule("my", NULL);
一次添加我的方法的函数的名称是什么。
基本上,您必须首先获得模块 dict :
d = PyModule_GetDict(m);
将模块名称存储在 PyString 对象中:
n = PyString_FromString("modname");
然后正确填充PyMethodDef结构ml
并创建一个新的可调用对象:
v = PyCFunction_NewEx(&ml, (PyObject*)NULL, n);
并将这个由函数名称键入的可调用对象添加到模块字典中:
PyDict_SetItemString(d, ml->ml_name, v);
我显然跳过了所有相关的错误检查。
所有这一切都是我对做什么的解释Py_InitModule4
(是一个使用默认参数Py_InitModule
调用的宏)。Py_InitModule4