使用 pybind11 在 python a C++ class 中打印

Printing in python a C++ class using pybind11

假设一个人有这样一个 class

class Data
{
   public:
      Data(double d): value_(d) {};

   private:
      double value_;
 };

是否可以使用 pybind11 在 Python 中导出它,这样

d = Data(3.14)
print(d)

显示 3.14 而不是

Data object at 0x7fed8a8c3298

导出时可以这样做:

class_<Data>("Data", module)
    .def("__repr__", [](const Data& d){ return std::to_string(d.getValue()); });

注意我添加了 getValue 方法,因为 value_ 是私有的。虽然取决于您的界面,但添加 Data::toString() 之类的内容可能更有意义。

http://pybind11.readthedocs.io/en/stable/classes.html#binding-lambda-functions