2013-06-03 2 views
4

Как преобразовать объект Python в C void с помощью Cython?Преобразование объекта Python в C void type

В настоящее время я получаю это сообщение, когда я пытаюсь бросить

Кастинг временного объекта Python для нечислового непитоновского типа

+1

Почему бы просто не использовать базовый 'PyObject *'? –

+0

Я предполагаю, что вы имеете в виду 'void *', а не 'void'. –

ответ

7

Это может быть сделаны как это:

1. Бросок от Python до C

Если вы на самом деле означало void * это будет:

some_pyobj = "abc" 
cdef void *ptr 
ptr = <void *>some_pyobj 

Если вы имели в виду PyObject * это будет:

cdef PyObject *ptr 
ptr = <PyObject *>some_pyobj   # Cast from Python object to C pointer 

Затем со стороны C, то PyObject struct можно, включив Python.h.

Вот ссылка (из object.h Python включаемый файл):

/* Nothing is actually declared to be a PyObject, but every pointer to 
* a Python object can be cast to a PyObject*. This is inheritance built 
* by hand. Similarly every pointer to a variable-size Python object can, 
* in addition, be cast to PyVarObject*. 
*/ 
typedef struct _object { 
    PyObject_HEAD 
} PyObject; 

2. отлиты из C в Python

Он работает в обоих направлениях, а это означает, что следующий также возможно:

cdef PyObject *ptr 
ptr = <PyObject *>some_pyobj 
cdef object some_other_pyobj 
some_other_pyobj = <object>ptr   # Cast from C pointer to Python object 
Смежные вопросы