1

如何通过 C-API 向我的模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,因为文档说这是可能的。

PyObject *mymod = Py_InitModule("my", NULL);

一次添加我的方法的函数的名称是什么。

4

1 回答 1

2

基本上,您必须首先获得模块 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

于 2011-07-03T21:10:03.517 回答