2

コードPyObjectの一部を に埋め込む作業を行っています。Pythonインスタンスを作成するために使用するとうまくいく解決策を見つけました。ただし、このような新しいスタイルの python クラスでは機能しません。pythonC++python 2.7PyInstance_New

    class B(object): 
      def __init__(self, name): 
        self.name = name

      def print_name(lastName): 
        print self.name + " " + lastName

私の古いコード ( python 2.7) では、クラス定義はオブジェクト クラスから継承されず、print_nameこのようにメソッドを呼び出すためにインスタンスを作成します。PS ファイル名は A.py です。

    PyObject *import, *attr, *instance, *methodcall, *arg, *tuple;
    arg = PyString_FromString("hello"); 
    tuple = PyTuple_Pack(1, arg);  

    import = PyImport_ImportModule("A"); 
    attr = PyObject_GetAttrString(import, "B");
    instance = PyInstance_New(attr, arg, NULL); 

    methodcall = PyObject_CallMethod(instance, (char *) "print_name", (char *) "(s)", (char *) "Bill"); 

python 3.xしかし、上記のコードは、 newではではなく をtype(class)返すため、もう機能しません。今、私はこのエラーが発生しています。objectinstance

内部関数への引数が正しくありません。

どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

これがうまくいくかどうかはわかりません。しかし、試してみることをお勧めします。「PyObject_CallObject」を使用してインスタンスを初期化し、「PyObject_CallMethod」を使用してインスタンスのメソッドを呼び出すだけです。

于 2016-11-17T12:57:38.380 に答える