使用C API创建在python中声明的python类的实例
我想创建一个使用C API在__main__
范围内定义的Python类的实例。
例如,该类称为MyClass
,定义如下:
class MyClass: def __init__(self): pass
类类型位于__main__
范围内。
在C应用程序中,我想创建此类的实例。 这可能是PyInstance_New
可以实现的,因为它需要类名。 但是这个function在Python3中不可用。
任何对替代品的帮助或建议都表示赞赏。
谢谢,保罗
我相信最简单的方法是:
/* 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
,其他两个是借用的引用。