Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C API创建用python声明的python类的实例_Python_C_Python C Api - Fatal编程技术网

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

使用C API创建用python声明的python类的实例,python,c,python-c-api,Python,C,Python C Api,我想用C API创建在\uuuu main\uuu范围内定义的Python类的实例 例如,该类称为MyClass,定义如下: class MyClass: def __init__(self): pass 类类型位于\uuuuu main\uuuu范围内 在C应用程序中,我想创建这个类的一个实例。使用PyInstance\u New可以简单地实现这一点,因为它采用了类名。但是,Python3中没有此功能 任何关于替代方案的帮助或建议都将不胜感激 谢谢,保罗我相信最简单的

我想用C API创建在
\uuuu main\uuu
范围内定义的Python类的实例

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

class MyClass:
    def __init__(self):
        pass
类类型位于
\uuuuu main\uuuu
范围内

在C应用程序中,我想创建这个类的一个实例。使用
PyInstance\u New
可以简单地实现这一点,因为它采用了类名。但是,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
就可以了,其他两个都是借来的引用