如何通过 C-API 向模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,正如文档所说这是可能的。
PyObject *mymod = Py_InitModule("my", NULL);
一次添加一个方法的函数的名称是什么。
最佳答案
基本上,您必须首先获取模块字典:
d = PyModule_GetDict(m);
将模块名称存储在 PyString 对象中:
n = PyString_FromString("modname");
然后正确填充 PyMethodDef struct ml
并创建一个新的可调用对象:
v = PyCFunction_NewEx(&ml, (PyObject*)NULL, n);
并将此可调用函数添加到模块字典中:
PyDict_SetItemString(d, ml->ml_name, v);
我显然跳过了所有相关的错误检查。
这一切都是我对Py_InitModule4
的解释确实如此(Py_InitModule
是一个使用默认参数调用 Py_InitModule4
的宏)。
关于python - 通过 C-API 向模块添加新命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565175/