gpt4 book ai didi

Python C api 迭代模块中的类

转载 作者:行者123 更新时间:2023-12-03 12:50:48 24 4
gpt4 key购买 nike

在本例中,模块是从文件加载的 python 脚本。我在互联网上找不到任何与此相关的信息。

如果我可以循环遍历模块中的所有对象,我可以使用 PyClass_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();

原因是用户将使用从基类派生的类来定义游戏内容。

class grass_tile(game.Tile):
def __init__(x, y):
// initialise

我尝试在模块上使用 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;
}
}

关于Python C api 迭代模块中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com