使用C API创建在python中声明的python类的实例

Pau*_*aul 7 c python python-c-api

我想创建一个__main__使用C API 在作用域中定义的Python类的实例.

例如,调用该类MyClass并定义如下:

class MyClass:
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

类类型存在于__main__范围内.

在C应用程序中,我想创建此类的实例.这可能是简单的,PyInstance_New因为它需要类名.但是这个功能在Python3中不可用.

任何对替代品的帮助或建议都表示赞赏.

谢谢,保罗

Ale*_*lli 18

我认为最简单的方法是:

/* 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", "");
Run Code Online (Sandbox Code Playgroud)

加上当然错误检查.instance完成后只需要DECREF ,另外两个是借来的引用.