0

この場合、モジュールはファイルからロードされた 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 を返します (明らかに、そのように反復することはできません)。

4

1 に答える 1

1

それを解決しました。これが他の誰かに役立つことを願っています。

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;
    }
}
于 2014-08-14T18:30:52.423 に答える