首页 > 解决方案 > 等效于 pybind11 中的 boost::python py::scope().attr()

问题描述

我正在将一些代码boost::pythonpybind11.

我有一门课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?谢谢!

标签: pythonc++boost-pythonpybind11

解决方案


您可以使用 names:m.attr("C") = m.attr("B");或 variable name 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");
}

推荐阅读