(在Boost::Python中)如何在C++中实例化Python模块定义的类对象并调用其方法

1 投票
1 回答
695 浏览
提问于 2025-04-16 12:56

假设我在一个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。

撰写回答