使用pybind11开发python扩展库
Posted caimouse
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用pybind11开发python扩展库相关的知识,希望对你有一定的参考价值。
当我们使用python的类时,可以动态地添加属性到类里去,这是基本的工作机制,但是在C++语言里的类是固定的,也就是说在编译之后是固定的,不会变化。因此要想让C++里导出的类支持python这种特性,必须有一些改变才可以。现在就来搞明白怎么样让C++里导出的类支持这个特性。
这时需要引入使用py::dynamic_attr()特性,经过它处理之后,就可以让C++类导出之后具备动态添加成员变量的功能,声明如下:
py::class_<MyPet>(m, "MyPet", py::dynamic_attr())
.def(py::init<const std::string &>())
.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
以上是关于使用pybind11开发python扩展库的主要内容,如果未能解决你的问题,请参考以下文章