Creazione di grado delle Python Tipo di estensione in C
-
24-09-2019 - |
Domanda
Sto scrivendo una semplice implementazione Vector
come un modulo di estensione Python in C che guarda soprattutto come questo:
typedef struct {
PyObject_HEAD
double x;
double y;
} Vector;
static PyTypeObject Vector_Type = {
...
};
E 'molto semplice da creare istanze di Vector
durante la chiamata da Python, ma ho bisogno di creare un'istanza Vector
nello stesso modulo di estensione. Ho guardato nella documentazione, ma non sono riuscito a trovare una risposta chiara. Qual è il modo migliore per fare questo?
Soluzione
più semplice è quello di chiamare l'oggetto tipo che hai creato, ad esempio, con PyObject_CallFunction - non lasciate che il nome, è ingannare consente di richiamare qualsiasi callable, non solo una funzione.
Se non si dispone di un riferimento al tipo di oggetto comodamente disponibile come static
globale per il modulo C, è possibile recuperare in vari modi, naturalmente (ad esempio, dal vostro oggetto modulo con un PyObject_GetAttrString ). Ma attaccare che PyObject*
in una variabile static
a livello di modulo C è probabilmente più semplice e più conveniente.