通过 C-API 向模块添加新命令?
如何通过 C-API 向模块动态添加方法?我有很多需要注册的函数,它们不在同一个数组中。我假设我可以使用 NULL 方法表初始化模块,正如文档所说这是可能的。
PyObject *mymod = Py_InitModule("my", NULL);
一次添加一个方法的函数的名称是什么?
How would I dynamically add methods to my module through the C-API? I have many functions I need to register, and they are not in the same array. I assume I can initialize the module with a NULL method table, as the documentation says that's possible.
PyObject *mymod = Py_InitModule("my", NULL);
What is the name of a function to add my methods one at a time.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
基本上,您必须首先获取模块字典:
将模块名称存储在 PyString 对象中:
然后正确填充 PyMethodDef struct
ml
并创建一个新的可调用函数:并将此可调用函数添加到模块字典中,该可调用函数由函数名称键入:
我显然跳过了所有相关的错误检查。
所有这些都是我对
Py_InitModule4
确实如此(Py_InitModule
是一个使用默认参数调用Py_InitModule4
的宏)。Basically, you'll have to get ahold of the module dict first:
Store the module name in a PyString object:
Then properly populate a PyMethodDef struct
ml
and create a new callable:and add this callable keyed by the function name to the module dict:
I've obviously skipped all relevant error checks.
All this is my interpretation about what
Py_InitModule4
does (Py_InitModule
is a macro callingPy_InitModule4
with default arguments).