Criar instância de uma classe python, declarada em python, com C API
-
18-09-2019 - |
Pergunta
Eu quero criar uma instância de uma classe Python definida no âmbito __main__
com a API C.
Por exemplo, a classe é chamado MyClass
e é definido da seguinte forma:
class MyClass:
def __init__(self):
pass
o tipo de classe vive sob escopo __main__
.
Dentro do aplicativo C, eu quero criar uma instância dessa classe. Isto poderia ter sido simplesmente possível com PyInstance_New
que leva o nome da classe. No entanto, esta função não está disponível em Python3.
Qualquer ajuda ou sugestões para alternativas são apreciados.
Obrigado, Paul
Solução
Eu acredito que a abordagem mais simples é:
/* 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", "");
além, claro, a verificação de erros. Você precisa instance
única DECREF quando você está feito com ele, os outros dois são referências emprestado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow