Question

Je veux créer une instance d'une classe Python définie dans le cadre de __main__ avec l'API C.

Par exemple, la classe est appelée MyClass et est défini comme suit:

class MyClass:
    def __init__(self):
        pass

Le type de classe vit sous la portée de __main__.

Dans l'application C, je veux créer une instance de cette classe. Cela aurait pu être tout simplement possible avec PyInstance_New car il prend le nom de classe. Cependant, cette fonction n'est pas disponible dans python3.

Toute aide ou suggestions d'alternatives sont appréciées.

Merci, Paul

Était-ce utile?

La solution

Je crois que l'approche la plus simple est:

/* 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", "");

plus de vérification des erreurs de cours. Vous avez besoin que DECREF instance lorsque vous avez terminé avec elle, les deux autres sont des références empruntées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top