2009-09-01 19 views

答えて

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

の同等だろう

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

:ドキュメントには、この例を示しますことはありません。この場合、object protocolが必要です。

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

戻り値:新たな参照。

可変数のC 引数を持つオブジェクトoのメソッドという名前のメソッドを呼び出します。 Cの引数は Py_BuildValue()フォーマット タプルを生成すべき文字列で記述されています。 形式はNULLであり、引数が指定されていない を示します。 成功またはNULL失敗時にコールの結果を返します。これは、Python の式o.method(args)に相当する です。 は、PyObject * argsPyObject_CallMethodObjArgs()の場合は の方が早いでしょう。

そして

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

戻り値:新たな参照。

オブジェクト名oのメソッドを呼び出します。メソッド名には、 という名前のPython文字列オブジェクトが渡されます。可変数の PyObject*引数を使用して が呼び出されます。引き数は で、可変数は で、その後にはNULLが続きます。成功した場合は 、失敗した場合は NULLを返します。

+0

「オブジェクト・プロトコル」は問題だったが何であるかを知ります。また、私は何らかの理由で呼び出しを探していました。ありがとう。 – jmucchiello

3

あなたの例では、次のようになります。

PyObject* ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg"); 
+0

私はその7年が遅すぎることは知っていますが、フォーマット引数ではどういう意味ですか? – JMzance

+0

これはPy_BuildValueと同じ書式文字列です。括弧はタプルを作成することを意味し、sは次の引数( "arg")がPython文字列に変換されるC char *文字列になることを意味します。タプルは関数の位置引数として使用されるので、1つの文字列を渡しています。 –

+0

'' '' kks '、' sss '、' www '、' sse '] 'や' [323.9,32,443,324]のような文字列や二重引用符のリストとしてc配列を渡したいのであれば、 '434.8,56.6]'? – jaykumarark

関連する問題