C APIで、pythonで宣言されたPythonのクラスのインスタンスを作成します。
-
18-09-2019 - |
質問
私はCのAPIと__main__
スコープで定義されたPythonクラスのインスタンスを作成したい。
例えば、クラスがMyClass
と呼ばれ、以下のように定義される:
class MyClass:
def __init__(self):
pass
クラスタイプは__main__
スコープの下に住んでいます。
Cアプリケーション内で、私はこのクラスのインスタンスを作成します。それはクラス名をとり、これはPyInstance_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
を必要とします。
所属していません StackOverflow