我想创建一个使用C API在__main__
范围内定义的Python类的实例。
例如,该类名为MyClass
,定义如下:
class MyClass:
def __init__(self):
pass
班级类型位于__main__
范围内。
在C应用程序中,我想创建此类的实例。这可能是PyInstance_New
可能只需要类名。但是这个功能在Python3中不可用。
对于替代品的任何帮助或建议表示赞赏。
谢谢,保罗
答案 0 :(得分:17)
我认为最简单的方法是:
/* 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", "");
加上当然错误检查。当你完成它时,你只需要DECREF instance
,其他两个是借来的参考文献。