Frage

Ich mag eine Instanz einer Python-Klasse schaffen, in dem __main__ Umfang mit dem C-API definiert.

Zum Beispiel wird die Klasse mit dem Namen MyClass und ist wie folgt definiert:

class MyClass:
    def __init__(self):
        pass

Der Klassentyp lebt unter __main__ Umfang.

Innerhalb der C-Anwendung möchte ich eine Instanz dieser Klasse erstellen. Dies könnte einfach möglich mit PyInstance_New gewesen, wie es Klassennamen nimmt. Allerdings ist diese Funktion in Python3 nicht zur Verfügung.

Jede Hilfe oder Anregungen für Alternativen sind willkommen.

Danke, Paul

War es hilfreich?

Lösung

Ich glaube, der einfachste Ansatz ist:

/* get sys.modules dict */
PyObject* sys_mod_dict = PyImport_GetModuleDict();
/* get the __main__ module object */
PyObject* main_mod = PyMapping_GetItemString(sys_mod_dict, "__main__");
/* call the class inside the __main__ module */
PyObject* instance = PyObject_CallMethod(main_mod, "MyClass", "");

und natürlich die Fehlerprüfung. Sie brauchen nur DECREF instance, wenn Sie mit ihm fertig sind, werden die beiden anderen Referenzen entlehnt.

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