Creare un'istanza di una classe di pitone, ha dichiarato in pitone, con API C
-
18-09-2019 - |
Domanda
Voglio creare un'istanza di una classe Python definita nell'ambito __main__
con l'API C.
Per esempio, la classe si chiama MyClass
ed è definito come segue:
class MyClass:
def __init__(self):
pass
Il tipo di classe vive sotto portata __main__
.
All'interno dell'applicazione C, voglio creare un'istanza di questa classe. Questo avrebbe potuto essere semplicemente possibile con PyInstance_New
quanto prende nome di classe. Tuttavia, questa funzione non è disponibile in python3.
Qualsiasi aiuto o suggerimenti per alternative sono apprezzati.
Grazie, Paul
Soluzione
Credo che l'approccio più semplice è:
/* 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", "");
più di controllo degli errori ovviamente. È sufficiente instance
DECREF quando hai finito con esso, gli altri due sono presi in prestito riferimenti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow