Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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
Python C api在模块中迭代类_Python_C++_Python 2.7_Python Embedding - Fatal编程技术网

Python C api在模块中迭代类

Python C api在模块中迭代类,python,c++,python-2.7,python-embedding,Python,C++,Python 2.7,Python Embedding,在本例中,模块是从文件加载的python脚本。我在网上找不到关于这件事的任何信息 如果我可以循环模块中的所有对象,我就可以使用PyClass\u Check筛选类。但我也不知道怎么做 // Load Py_SetProgramName(argv[0]); Py_Initialize(); PySys_SetArgv(argc, argv); inithello(); PyObject *pModule = PyImport_ImportModule("test123"); if (pMod

在本例中,模块是从文件加载的python脚本。我在网上找不到关于这件事的任何信息

如果我可以循环模块中的所有对象,我就可以使用PyClass\u Check筛选类。但我也不知道怎么做

// Load
Py_SetProgramName(argv[0]);
Py_Initialize();
PySys_SetArgv(argc, argv);

inithello();

PyObject *pModule = PyImport_ImportModule("test123");

if (pModule != NULL) {      
    // iterate through classes.
    Py_DECREF(pModule);
} else {
    PyErr_Print();
    std::cerr << "Failed to load module" << std::endl;
    return 1;
}
Py_Finalize();

我曾尝试在模块上使用PyObject_GetIter(),但它返回NULL(显然不能以这种方式进行迭代)。

解决了这个问题。希望这对其他人有帮助

PyObject *dict = PyModule_GetDict(pModule);
PyObject *key, *value = NULL;
Py_ssize_t pos = 0;

while (PyDict_Next(dict, &pos, &key, &value)) {
    if (PyClass_Check(value)) {
        std::cerr << "IsClass" << std::endl;
    } else {
        std::cerr << "NotClass" << std::endl;
    }
}
PyObject*dict=PyModule\u GetDict(pModule);
PyObject*key,*value=NULL;
Py_ssize_t pos=0;
while(PyDict_Next(dict、pos、key和value)){
if(PyClass_检查(值)){
标准:cerr
PyObject *dict = PyModule_GetDict(pModule);
PyObject *key, *value = NULL;
Py_ssize_t pos = 0;

while (PyDict_Next(dict, &pos, &key, &value)) {
    if (PyClass_Check(value)) {
        std::cerr << "IsClass" << std::endl;
    } else {
        std::cerr << "NotClass" << std::endl;
    }
}