假设我有以下嵌入python的c程序:
const char *pyCode =
"class Foo:n"
" def __init__(self):n"
" self.foo = 42n"
" def set_foo(foo):n"
" self.foo=foon"
"n"
"foo=Foo()n"
;
Py_Initialize();
PyObject* main_module = PyImport_AddModule("__main__");
PyObject* main_dict = PyModule_GetDict(main_module);
PyRun_StringFlags(pyCode, Py_file_input, main_dict, main_dict, NULL);
PyObject *FooObj = PyDict_GetItemString(main_dict, "foo");
现在C变量FooObj
是对python实例foo
的引用。但是我如何从C中访问FooObj
的属性?
特别是,我如何访问PyObject 'foo.foo'?
我怎么能从C调用成员函数foo.set_foo()?
使用对象协议函数。PyObject_GetAttr
族是属性访问(如PyObject_GetAttrString(FooObj, "foo")
), PyObject_Call
族是函数调用(如PyObject_CallMethod(FooObj, "set_obj", "(O)", some_other_object)
)。
http://docs.python.org/c-api/是你的朋友。
使用PyObject_GetAttr()
或PyObject_GetAttrString()
读取属性,使用PyObject_CallMethod()
调用方法。