2010-11-12 8 views
31

decir que he definido mi diseño objeto como:Crear un objeto utilizando la API de Python C

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

... y mi tipo de definición:

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

    pyfoo_new, 
}; 

¿Cómo se crea una nueva instancia de pyfoo en algún lugar dentro de mi extensión C?

Respuesta

33

Llame PyObject_New(), seguido de PyObject_Init().

EDIT: La mejor forma de hacerlo es call el objeto de clase, al igual que en sí mismo 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); 
+2

Acepto los documentos son un poco escueta en ese caso. Actualicé mi respuesta con la llamada requerida a 'PyObject_Init()'. –

+0

Espera, 'PyObject_Init()' no toma ningún argumento, entonces, ¿cómo se pasan los argumentos de inicialización requeridos? – detly

+0

@detly, necesita llamar al objeto de la clase. Ver mi respuesta actualizada. –

Cuestiones relacionadas