Печать на python класса C++ с использованием pybind11

Допустим, у кого-то есть такой класс

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

   private:
      double value_;
 };

Можно ли экспортировать его в Python с pybind11, что

d = Data(3.14)
print(d)

отображает 3.14 вместо чего-то вроде

Объект данных в 0x7fed8a8c3298

1 ответ

Решение

Вы можете сделать что-то вроде этого при экспорте:

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

Другие вопросы по тегам