您当前的位置: 首页 >  Python

暂无认证

  • 2浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用pybind11开发python扩展库(4)

发布时间:2021-06-24 09:34:43 ,浏览量:2

当我们使用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
关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.0508s