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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top