Я определяю тип расширения для Python в C, регистрируя новый PyTypeObject
. Мой тип имеет набор методов, определенных как PyMethodDef
структур в глобальном массиве stati c.
Кроме того, мой тип является частью модуля, в котором я определил пользовательский класс исключений с использованием PyErr_NewException()
. Этот пользовательский класс исключений можно получить, вызвав макрос GETSTATE(module)
, как описано в руководстве «Перенос модулей расширения на Python 3» .
Мой вопрос заключается в следующем: мои методы, как я могу получить ссылку на модуль, к которому принадлежит мой объект, чтобы получить мой класс исключений? Конкретно, учитывая следующий скелет для метода, генерирующего исключение:
PyObject* MyMethod(PyObject* self, PyObject* args)
{
PyObject* module = XXX;
struct module_state *state = GETSTATE(module);
PyErr_SetString(state->error, message);
return NULL;
}
Что я должен написать вместо XXX
, чтобы получить ссылку на модуль? Я хотел бы избежать любых явных вызовов PyImport_AddModule()
(Python <3.7) и <code>PyImport_GetModule() (Python> = 3.7). ТИА!