Erstellen Instanz von Python-Verlängerungs-Art in C
-
24-09-2019 - |
Frage
Ich bin eine einfache Vector
Implementierung als Python-Erweiterungsmodul in C das sieht meist wie folgt zu schreiben:
typedef struct {
PyObject_HEAD
double x;
double y;
} Vector;
static PyTypeObject Vector_Type = {
...
};
Es ist sehr einfach Instanzen Vector
zu erstellen, während sie von Python aufrufen, aber ich brauche eine Vector
Instanz in der gleichen Erweiterungsmodul zu erstellen. Ich sah in der Dokumentation, aber ich konnte keine klare Antwort finden. Was ist der beste Weg, dies zu tun?
Lösung
Einfachstes ist die Art Objekt aufrufen Sie erstellt haben, zum Beispiel mit PyObject_CallFunction - lassen Sie sich nicht vom Namen täuschen, es lassen Sie rufen jeder aufrufbar, nicht nur eine Funktion.
Wenn Sie nicht über einen Verweis auf Ihre Art Objekt bequem verfügbar als static
global zu Ihrer C-Modul haben, können Sie es auf verschiedene Weise abrufen, natürlich (zB von Ihrem Modul-Objekt mit einem PyObject_GetAttrString ). Aber kleben, dass PyObject*
in ein static
Modulebene C-Variable ist wahrscheinlich einfachste und bequemste.