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

时间:2009-07-18 12:38:41

标签: python c python-c-api

我想创建一个使用C API在__main__范围内定义的Python类的实例。

例如,该类名为MyClass,定义如下:

class MyClass:
    def __init__(self):
        pass

班级类型位于__main__范围内。

在C应用程序中,我想创建此类的实例。这可能是PyInstance_New可能只需要类名。但是这个功能在Python3中不可用。

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

谢谢,保罗

1 个答案:

答案 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,其他两个是借来的参考文献。