Erstellen Instanz einer Python-Klasse, in Python erklärt, mit dem C-API
-
18-09-2019 - |
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
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