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

Foi útil?

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