首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pybind11类定义

Pybind11类定义
EN

Stack Overflow用户
提问于 2020-01-30 03:05:45
回答 1查看 95关注 0票数 1

pybind11中的以下类定义之间有什么区别?

(1)

代码语言:javascript
复制
py::class_<Pet> pet(m, "Pet");

(2)

代码语言:javascript
复制
py::class_<Pet>(m, "Pet")

pet(m, "Pet")pet有什么用?我在文档的第42页"5.8枚举和内部类型“部分找到了这个定义,可以在here找到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 06:12:49

第一个创建一个命名变量,您可以稍后在同一范围内引用该变量(就像您引用的示例中所做的那样),第二个创建一个(未命名的)临时变量,您只能通过链接在同一语句上设置更多属性的函数调用来使用该临时变量。如果变量没有脱离局部作用域,那么唯一的区别就是语法。否则,通过命名它,例如,您可以将它传递给一个或多个助手函数(例如,用于分解公共属性的定义)。

需要理解的是,所有Python类、函数等都是运行时构造。也就是说,需要调用一些Python API代码来创建它们,例如在加载模块时。py::class_的对象调用API来创建Python类,并注册一些类型信息以供内部pybind11使用(例如,稍后进行强制转换)。也就是说,它只是一个创建所请求的Python类的方法,而不是该类本身。一旦创建了Python类并存储了它的类型信息,就不再需要recipe对象,并且可以安全地销毁它(例如,通过让它超出作用域来销毁b/c )。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59973926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档