Добавление новой команды в модуль через C-API? - PullRequest
1 голос
/ 03 июля 2011

Как мне динамически добавлять методы в мой модуль через C-API? У меня есть много функций, которые мне нужно зарегистрировать, и они не находятся в одном массиве. Я предполагаю, что могу инициализировать модуль с помощью таблицы методов NULL, поскольку в документации сказано, что это возможно.

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

Как называется функция добавления моих методов по одному.

1 Ответ

2 голосов
/ 04 июля 2011

По сути, вам нужно сначала получить доступ к модулю dict:

d = PyModule_GetDict(m);

Сохранить имя модуля в объекте PyString:

n = PyString_FromString("modname");

Затем правильно заполнить PyMethodDef struct ml и создайте новый вызываемый элемент:

v = PyCFunction_NewEx(&ml, (PyObject*)NULL, n);

и добавьте этот вызываемый элемент с именем функции в модуль dict:

PyDict_SetItemString(d, ml->ml_name, v);

I 'мы явно пропустили все соответствующие проверки ошибок.

Все это моя интерпретация того, что делает Py_InitModule4 (Py_InitModule - это макрос, вызывающий Py_InitModule4 с аргументами по умолчанию).

...