等效于 pybind11 中的 boost::python py::scope().attr()
Posted
技术标签:
【中文标题】等效于 pybind11 中的 boost::python py::scope().attr()【英文标题】:Equivalent to boost::python py::scope().attr() in pybind11 【发布时间】:2020-07-03 19:45:52 【问题描述】:我正在将一些代码从boost::python
移植到pybind11
。
我有一个课程classA
,我很容易把它包起来:
PYBIND11_MODULE(module, m)
m.doc() = "pybind11 module";
py::class_<classA>(m, "classA")
.def(...
...
;
这很完美。我面临的问题是,显然这个类在过去被称为不同的,比如说classB
。为了保持向后兼容性(在boost::python
代码中),原始开发人员做了:
py::scope().attr("classB") = py::scope().attr("classA");
pybind11
上是否有与此等价的内容?
谢谢!
【问题讨论】:
还没有使用 pybind111,但据我所知,m
是模块实例。所以也许m.attr("classB") = m.attr("classA")
?
【参考方案1】:
您可以使用名称:m.attr("C") = m.attr("B");
,或变量名称class_A
,在这种情况下:
class A
public:
void hello()
std::cout << "world" << std::endl;
;
PYBIND11_MODULE(example, m)
py::class_<A> class_A(m, "A");
class_A.def(py::init<>()).def("hello", &A::hello);
m.attr("B") = class_A;
m.attr("C") = m.attr("B");
【讨论】:
以上是关于等效于 pybind11 中的 boost::python py::scope().attr()的主要内容,如果未能解决你的问题,请参考以下文章
并发中的 Pybind11 并行处理问题::parallel_for
无法从 pybind11 中的静态函数返回 shared_ptr