当我们使用python的类时,可以动态地添加属性到类里去,这是基本的工作机制,但是在C++语言里的类是固定的,也就是说在编译之后是固定的,不会变化。因此要想让C++里导出的类支持python这种特性,必须有一些改变才可以。现在就来搞明白怎么样让C++里导出的类支持这个特性。
这时需要引入使用py::dynamic_attr()特性,经过它处理之后,就可以让C++类导出之后具备动态添加成员变量的功能,声明如下:
py::class_(m, "MyPet", py::dynamic_attr()) .def(py::init()) .def_property("name", &MyPet::getName, &MyPet::setName);
而类MyPet定义如下:
class MyPet { public: MyPet(const std::string &name) : name(name) { } void setName(const std::string &name_) { name = name_; } const std::string &getName() const { return name; } private: std::string name; };
可见在这个类没有声明任何特别的类型,就可以在python里使用了,如下来测试一下:
#演法动态属性 p = TestAdd.MyPet