gpt4 book ai didi

c++ - 如何使用 boost::python 创建和使用 Python 对象的实例

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:36 25 4
gpt4 key购买 nike

假设我有一个像这样的 Python 类:

class MyPythonClass:
def Func1(self, param):
return
def Func2(self, strParam):
return strParam

如果我想在我的 C++ 代码中嵌入包含该类的 Python 脚本,通过我的 C++ 代码创建该对象的实例,然后调用该 python 对象的成员,我该怎么做?

我想应该是这样的:

namespace python = boost::python;
python::object main = python::import("main");
python::object mainNamespace = main.attr("__dict__");
python::object script = python::exec_file(path_to_my_script, mainNamespace);
python::object foo = mainNamespace.attr("MyPythonClass")();
python::str func2return = foo.attr("Func2")("hola");
assert(func2return == "hola");

但是我尝试过的这段代码的许多变体都没有奏效。为了能够做到这一点,我需要在我的代码中加入什么神奇的调味料?

最佳答案

这就是最终对我有用的东西。

namespace python = boost::python;
python::object main = python::import("main");
python::object mainNamespace = main.attr("__dict__");

//add the contents of the script to the global namespace
python::object script = python::exec_file(path_to_my_script, mainNamespace);

//add an instance of the object to the global namespace
python::exec("foo = MyPythonClass()", mainNamespace);
//create boost::python::object that refers to the created object
python::object foo = main.attr("foo");

//call Func2 on the python::object via attr
//then extract the result into a const char* and assign it to a std::string
//the last bit could be done on multiple lines with more intermediate variables if desired
const std::string func2return = python::extract<const char*>(foo.attr("Func2")("hola"));
assert(func2return == "hola");

如果有更好的方法,欢迎评论。

关于c++ - 如何使用 boost::python 创建和使用 Python 对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com