(в Boost :: Python) Как создать экземпляр класса, определенного в модуле python, и вызвать его методы из C ++ - PullRequest
1 голос
/ 03 марта 2011

Предположим, у меня есть класс, определенный в модуле Python:

class A(object):
    def __init__(self):
        print 'init'
    def method(self):
        print 'method'

Я бы хотел создать экземпляр объекта этого класса с помощью boost :: python. Я попробовал это следующим образом:

namespace py = boost::python;

// importing the module and extracting its namespace to
// the variable `ns`
...

py::object a = py::exec("A()", ns)
a.attr("method")()

, который печатает init, а затем вылетает. Я заметил, что после выполнения

py::object a = py::exec("A()", ns)

печать строкового представления с

std::cout << std::string(py::extract<std::string>(py::str(a))) << std::endl;

печатает Нет. Итак, что-то пошло не так. Как мне сделать это правильно?

1 Ответ

1 голос
/ 15 марта 2011

Я нашел ответ сам: используйте eval вместо exec.

...