Создайте объект с помощью Python C API - PullRequest
40 голосов
/ 12 ноября 2010

Скажи, что мой макет объекта определен как:

typedef struct {
    PyObject_HEAD
    // Other stuff...
} pyfoo;

... и мое определение типа:

static PyTypeObject pyfoo_T = {
    PyObject_HEAD_INIT(NULL)
    // ...

    pyfoo_new,
};

Как мне создать новый экземпляр pyfoo где-нибудь в моем расширении C?

1 Ответ

44 голосов
/ 12 ноября 2010

Вызов PyObject_New () , затем PyObject_Init () .

РЕДАКТИРОВАНИЕ: Лучший способ - вызвать объект класса, как в самом Python:

/* Pass two arguments, a string and an int. */
PyObject *argList = Py_BuildValue("si", "hello", 42);

/* Call the class object. */
PyObject *obj = PyObject_CallObject((PyObject *) &pyfoo_T, argList);

/* Release the argument list. */
Py_DECREF(argList);
...