Создание экземпляра типа расширения Python в C

StackOverflow https://stackoverflow.com/questions/2573060

  •  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, вероятно, простейшая и удобная.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top