8

Pythonオブジェクトを指すPyObject*がある場合、オブジェクトメソッドの1つを呼び出すにはどうすればよいですか?ドキュメントには、この例は示されていません。

PyObject* obj = ....
PyObject* args = Py_BuildValue("(s)", "An arg");
PyObject* method = PyWHATGOESHERE(obj, "foo");
PyObject* ret = PyWHATGOESHERE(obj, method, args);
if (!ret) {
   // check error...
}

これは、

>>> ret = obj.foo("An arg")
4

2 に答える 2

9
PyObject* obj = ....
PyObject *ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");
if (!ret) {
   // check error...
}

PythonCAPIのドキュメントを読んでください。この場合、オブジェクトプロトコルが必要です。

PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)

戻り値:新しい参照。

可変数のC引数を使用して、オブジェクトoのmethodという名前のメソッドを呼び出します。C引数はPy_BuildValue()、タプルを生成するフォーマット文字列で記述されます。形式はNULL、引数が指定されていないことを示す、である可能性があります。成功時またはNULL失敗時の呼び出しの結果を返します。これはPython式と同等ですo.method(args)PyObject * argsを渡すだけの 場合PyObject_CallMethodObjArgs()は、より高速な代替手段であることに注意してください。

PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)

戻り値:新しい参照。

オブジェクトのメソッドを呼び出します。メソッドのo名前は、名前のPython文字列オブジェクトとして指定されます。可変数の PyObject*引数で呼び出されます。引数は、可変数のパラメーターとそれに続く。として提供されますNULL。成功時または NULL失敗時の呼び出しの結果を返します。

于 2009-09-01T19:14:33.797 に答える
3

あなたの例は次のようになります:

PyObject* ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");
于 2009-09-01T19:27:05.363 に答える