9

__main__C API でスコープに定義された Python クラスのインスタンスを作成したいと考えています。

たとえば、クラスが呼び出さMyClassれ、次のように定義されます。

class MyClass:
    def __init__(self):
        pass

クラス型は__main__スコープの下にあります。

C アプリケーション内で、このクラスのインスタンスを作成したいと考えています。PyInstance_Newこれは、クラス名を取るため、単純に可能でした。ただし、この関数は Python3 では使用できません。

代替案のヘルプや提案をいただければ幸いです。

ありがとう、ポール

4

1 に答える 1

20

最も簡単なアプローチは次のとおりです。

/* 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です。他の2つは借用された参照です。

于 2009-07-18T15:41:44.240 に答える