Python 调用对象上的方法
给定一个指向python对象的PyObject*,如何调用其中一个对象方法?文档中从未给出过这样的示例:Python 调用对象上的方法,python,c,embedded-language,Python,C,Embedded Language,给定一个指向python对象的PyObject*,如何调用其中一个对象方法?文档中从未给出过这样的示例: PyObject* obj = .... PyObject* args = Py_BuildValue("(s)", "An arg"); PyObject* method = PyWHATGOESHERE(obj, "foo"); PyObject* ret = PyWHATGOESHERE(obj, method, args); 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...
}
这相当于
>>> ret = obj.foo("An arg")
仔细阅读这本书。在这种情况下,您需要
返回值:新引用
调用名为method of object o的方法,方法的变量号为C
论据。C参数是
由Py\u BuildValue()格式描述
应该生成元组的字符串。
格式可以是NULL
,表示
没有提供任何参数。
返回调用的结果
成功,或失败时为空。这是
Python的等价物
表达式o.method(args)
。注意
如果只传递PyObject*args
,
PyObject\u CallMethodObjArgs()
是一个
更快的选择
及
返回值:新引用
调用对象o
的方法,其中给出了方法的名称
作为名称中的Python字符串对象。信息技术
使用可变数量的
PyObject*
参数。争论是
作为可变数量的
参数后跟NULL
。退换商品
呼叫成功的结果,或
失败时NULL
你的例子是:
PyObject* ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");
知道什么是“对象协议”是个问题。另外,我出于某种原因正在寻找invoke。谢谢。我知道这已经晚了7年,但arg格式中的(s)是什么意思?它与Py_BuildValue使用的格式字符串相同:parens表示它将构建一个元组,s表示下一个参数(“arg”)将是一个C char*字符串,转换为Python字符串。元组用作函数的位置参数,因此我们只传递一个字符串。如果我想将c数组作为字符串列表或双精度列表传递,例如,['kks',sss','www','sse']
或[323.9,32443434.8,56.6]
?
PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)
PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)
PyObject* ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");