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

È stato utile?

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
scroll top