(在 Boost::Python 中)如何实例化 python 模块中定义的类的对象并从 C++ 调用其方法
假设我在 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 。所以出了问题。我该如何正确地做到这一点?
Assume I have a class defined in a python module:
class A(object):
def __init__(self):
print 'init'
def method(self):
print 'method'
I'd like to instantiate an object of that class with boost::python. I tried it the following way:
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")()
which prints init
and then crashes. I observed that after executing
py::object a = py::exec("A()", ns)
printing the string representation of a with
std::cout << std::string(py::extract<std::string>(py::str(a))) << std::endl;
prints None. So something went wrong. How do I do this right?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我自己找到了答案:使用 eval 而不是 exec。
I found the answer myself: use eval instead of exec.