Créer une instance d'une classe python, a déclaré en python, avec l'API C
-
18-09-2019 - |
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
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.