Создание экземпляра типа расширения Python в C
-
24-09-2019 - |
Вопрос
Я пишу простой Vector
Реализация как модуль расширения Python в C, который выглядит в основном так:
typedef struct {
PyObject_HEAD
double x;
double y;
} Vector;
static PyTypeObject Vector_Type = {
...
};
Очень просто создавать экземпляры Vector
призывая с Python, но мне нужно создать Vector
экземпляр в том же модуле расширения. Я посмотрел в документацию, но я не смог найти четкий ответ. Какой лучший способ сделать это?
Решение
Простейший состоит в том, чтобы вызвать созданный вами объект типа, например Pyobject_callfunction - Не позволяйте имени обмануть вас, он позволит вам позвонить Любые Callable, нет просто функция.
Если у вас нет ссылки на объект вашего типа, удобно доступным в качестве static
Global до вашего модуля C, вы можете получить его различными способами, конечно (например, из вашего модуля объекта с помощью Pyobject_getattrstring.). Но придерживая это PyObject*
в а static
Переменная модуля-уровня C, вероятно, простейшая и удобная.