Как получить доступ к значению экземпляра из встроенной программы на python? - PullRequest
0 голосов
/ 01 сентября 2011

Предположим, что у меня есть следующая c-программа со встроенным python:

const char *pyCode =
  "class Foo:\n"
  "  def __init__(self):\n"
  "    self.foo = 42\n"
  "  def set_foo(foo):\n"
  "    self.foo=foo\n"
  "\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. Но как мне получить доступ к атрибутам FooObj из C?

В частности, как я могу получить доступ к PyObject 'foo.foo'?

А как мне из C вызвать функцию-член foo.set_foo ()?

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

http://docs.python.org/c-api/ - ваш друг.

Атрибуты читаются с PyObject_GetAttr() или PyObject_GetAttrString(), методы вызываются с PyObject_CallMethod().

1 голос
/ 01 сентября 2011

Использование функций объектный протокол . PyObject_GetAttr family - это атрибут доступа (например, PyObject_GetAttrString(FooObj, "foo"), PyObject_Call family - это вызов функции (например, PyObject_CallMethod(FooObj, "set_obj", "(O)", some_other_object)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...