(在Boost::Python中)如何在C++中实例化Python模块定义的类对象并调用其方法
假设我在一个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)
用下面的代码打印对象a的字符串表示:
std::cout << std::string(py::extract<std::string>(py::str(a))) << std::endl;
结果是None。所以肯定是哪里出错了。我该怎么做才能正确创建对象呢?
1 个回答
1
我自己找到了答案:用 eval 代替 exec。