使用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扩展库的主要内容,如果未能解决你的问题,请参考以下文章

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11来快速开发python程序扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库

使用pybind11开发python扩展库