从一个python嵌入式程序,我如何访问一个实例值



假设我有以下嵌入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()调用方法。

最新更新