Python C API: как получить что-то из модуля - PullRequest
0 голосов
/ 27 апреля 2019

В Python C API я уже знаю, как импортировать модуль через PyImport_ImportModule, как описано в Документация Python: импорт модулей .Я также знаю, что существует множество способов создания или выделения или инициализации модуля, а также некоторые функции для управления модулем, как описано в Документация Python: Объекты модуля .

Но как можноЯ получаю функцию из модуля (и вызываю ее), или получаю тип / класс из модуля (и создаю его экземпляр), или получаю объект из модуля (и работаю с ним), или получаю что-нибудь из модуляи делать что-нибудь, что я хочу сделать?

Я думаю, что это может быть глупым вопросом, но я действительно не могу найти учебник или документацию.Единственный способ добиться этого - использовать PyModule_GetDict, чтобы получить свойство __dict__ модуля и получить то, что я хочу, как описано в последней документации, о которой я упоминал .Но в документации также рекомендуется не использовать эту функцию для управления модулем.

Так есть ли какой-либо "официальный способ" или наилучшая практика для получения чего-либо из модуля?

1 Ответ

1 голос
/ 28 апреля 2019

Согласно документации для PyModule_GetDict:

Рекомендуется, чтобы расширения использовали другие функции PyModule_*() и PyObject_*() вместо непосредственного манипулирования __dict__.

модуля.

Функции, которые вам нужны, являются общими объектными функциями (PyObject_*), а не модульными функциями (PyModule_*), и я подозреваю, что именно здесь вы искали не в том месте.

Вы хотите использовать PyObject_GetAttr или PyObject_GetAttrString.

...