Создание экземпляра типа расширения Python в C - PullRequest
0 голосов
/ 04 апреля 2010

Я пишу простую Vector реализацию в виде модуля расширения Python на C, который выглядит в основном так:

typedef struct {
    PyObject_HEAD
    double x;
    double y;
} Vector;

static PyTypeObject Vector_Type = {
    ...
};

Очень просто создавать экземпляры Vector при вызове из Python, но мне нужно создать экземпляр Vector в том же модуле расширения. Я посмотрел в документации, но не смог найти четкого ответа. Какой лучший способ сделать это?

1 Ответ

3 голосов
/ 04 апреля 2010

Самое простое - вызвать созданный вами объект типа, например, с помощью PyObject_CallFunction - не позволяйте имени обмануть вас, он позволяет вам вызывать любой вызываемый, не просто функция.

Если у вас нет ссылки на объект типа, удобно доступный как глобальный static для вашего модуля C, вы, конечно, можете получить его различными способами.(например, из вашего объекта модуля с PyObject_GetAttrString ).Но вставлять PyObject* в переменную * уровня модуля static, вероятно, проще всего и удобнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...