C APIで、pythonで宣言されたPythonのクラスのインスタンスを作成します。

StackOverflow https://stackoverflow.com/questions/1147452

  •  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を必要とします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top