Python / C: Как получить модуль из метода - PullRequest
0 голосов
/ 24 марта 2020

Я определяю тип расширения для 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). ТИА!

...