Python中的dataclass:简化数据类的创建

Python中的dataclass是一个装饰器,用于自动添加一些常见的方法,如构造函数、__repr__、__eq__等。它简化了创建数据类的过程,减少了样板代码,提高了代码的可读性和可维护性。有点类似java里面的Java Bean。

让我们看一个简单的例子来说明dataclass的用法:

from dataclasses import dataclass@dataclass
class User:name: strage: intp1 = User("小博", 18)
p2 = User("小博", 18)
p3 = User("小明", 19)print(p1)  # Output: User(name='小博', age=18)
print(p1.__repr__())  # Output: User(name='小博', age=18)
print(p1 == p2)  # Output: True
print(p1.__eq__(p2))    # Output: True
print(p1 == p3)  # Output: False

在上面的例子中,我们定义了一个名为User的数据类,它有两个成员变量:name和age。在这个简单的例子中,dataclass自动为我们创建了以下方法:

  1. __init__: 自动添加了带有name和age参数的构造函数,我们可以用User("小博", 18)的形式创建对象。

  2. __repr__: 自动添加了一个友好的表示对象的字符串方法,我们可以通过print()函数查看对象的内容。

  3. __eq__: 自动添加了对象之间的相等比较方法,我们可以使用==来比较两个对象是否相等。

接下来让我们看一下dataclass的对象之间怎么比较

from dataclasses import dataclass, field@dataclass(order=True)
class Person:name: strage: int = field(compare=False) # 指定某个字段不参与排序height: float# 创建实例
person1 = Person("Alice", 30, 185.5)
person2 = Person("Bob", 25, 170.0)
person3 = Person("Charlie", 35, 175.2)
person4 = Person("Alice", 35, 175.2)
person5 = Person("Bob", 25, 185.2)# 使用比较运算符进行排序
people = [person1, person2, person3, person4, person5]
people_sorted = sorted(people) # 默认升序
people_sorted = sorted(people, reverse=True)for person in people_sorted:print(person.name, person.age, person.height)输出结果:
Charlie 35 175.2
Bob 25 185.2
Bob 25 170.0
Alice 30 185.5
Alice 35 175.2

要让类的实例对象之间进行比较,需要在定义类的时候,加上@dataclass(order = True)。默认将生成__gt__、__ge__、__lt__、__le__方法。如果传入False,则省略它们。默认会按照类中定义的字段顺序进行对比,第一个字段的值相等的时候,就用第二个字段进行比较。要忽略某个字段不进行对比的话,可以使用field(compare=False)

End

 
 
 
 
 
如果觉得文章对你有帮助的话,欢迎点赞转发~
如果还没有进粉丝交流群的小伙伴,赶快添加好友(xiaobotester)邀请你们进群喔。
 
👇👇👇

关注公众号,测试干货及时送达dcc4c5df8e2013d9a878750222e517ed.png

为感谢所有粉丝的关注和长期以来的支持,特在公众号后台为大家准备了一些资料,可在后台回复【百宝箱/关键字】获取相关链接,资料会持续更新,有需要的可以先私聊作者补充文档。

13d229c6adf4ac59523e5fef22acb017.png

往期精彩回顾

0c33bae728fa0f24cd4fd206cff65120.png

如何打造一篇优秀的简历

混迹职场多年的你,面试真的准备好了吗?

你还在抱怨职场的不公吗?

职场篇-初入职场如何选择行业和公司
面试逻辑题分享--字母数字映射关系推算题

非技术性的面试中的技巧性回答集锦(建议收藏)

你的求职简历中招了吗?

测试编程笔试题No.1-输入表格列的英文名称,返回其对应的数字序号

软件测试面试题分享-No.1

软件测试面试题分享-No.2

软件测试面试题分享-No.3

软件测试面试题分享-No.4

软件测试面试题分享-No.5

软件测试面试题分享-No.6(某某某公司面试题)

软件测试面试题分享-No.7(接口自动化面试题)

xxx公司测试岗位企业面试题

07ed619cbde9361e13263bf7d38199ed.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/60146.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode无法写入文件 NoPermissions (FileSystemError): Error: EACCES: permission

用Vscode想要新建一个index.html的时候遇到了下图问题,说没有权限无法写入文件。 没有权限,咱们给他加上权限哈哈哈,博主是Mac电脑,如下操作: 1.找到你项目的根目录,右键,点击“显示简介”。 …

【非欧几里得域信号的信号处理】使用经典信号处理和图信号处理在一维和二维欧几里得域信号上应用低通滤波器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

vue3+element-plus点击列表中的图片预览时,图片被表格覆盖

文章目录 问题解决 问题 视觉 点击图片进行预览&#xff0c;但还能继续选中其他的图片进行预览&#xff0c;鼠标放在表格上&#xff0c;那一行表格也会选中&#xff0c;如图所示第一行的效果。 代码 <el-table-column prop"id" label"ID" width"…

React源码解析18(1)------ React.createElement 和 jsx

1.React.createElement 我们知道在React17版本之前&#xff0c;我们在项目中是一定需要引入react的。 import React from “react” 即便我们有时候没有使用到React&#xff0c;也需要引入。原因是什么呢&#xff1f; 在React项目中&#xff0c;如果我们使用了模板语法JSX&am…

MySQL单表查询

单表查询 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varch…

工程监测仪器振弦传感器信号转换器应用于隧洞监测

工程监测仪器振弦传感器信号转换器应用于隧洞监测 隧洞建设是重大工程项目&#xff0c;监测隧洞结构和环境的变化对确保隧洞安全和运行管理至关重要。工程监测仪器是实现隧洞监测的关键设备&#xff0c;其中振弦传感器和信号转换器是非常重要的组成部分。 振弦传感器是一种专门…

《Linux从练气到飞升》No.10 冯洛依曼体系结构

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

Finalshell连接Linux超时之Connection timed out: connect

目录 &#x1f349;前言 &#x1f33c;报错 &#x1f33c;摸索 &#x1f4aa;解决措施 &#x1f349;前言 &#xff08;1&#xff09;福利&#xff1a;花了2小时才解决的BUG&#xff0c;希望本篇文章能帮你10分钟解决&#xff01; &#xff08;2&#xff09;tips&#xff1…

Apache DolphinScheduler 3.1.8 版本发布,修复 SeaTunnel 相关 Bug

近日&#xff0c;Apache DolphinScheduler 发布了 3.1.8 版本。此版本主要基于 3.1.7 版本进行了 bug 修复&#xff0c;共计修复 16 个 bug, 1 个 doc, 2 个 chore。 其中修复了以下几个较为重要的问题&#xff1a; 修复在构建 SeaTunnel 任务节点的参数时错误的判断条件修复 …

windows 10 远程桌面配置

1. 修改远程桌面端口&#xff08;3389&#xff09; 打开注册表&#xff08;winr&#xff09;, 输入regedit 找到配置项【计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Wds\rdpwd\Tds\tcp】 &#xff0c; 可以通过搜索“Wds”快速定位。 修改端口配…

斗轮机与程控站之间开关量双向无线通讯

斗轮堆取料机是一种对散料进行连续堆取作业的高效装卸大型机械,被广泛使用于火力发电厂和炼焦厂的输煤系统中。目前对斗轮机的技改主要为将斗轮机的部分程控信号改为无线传输&#xff0c;取代卷筒电机和电缆的应用。 多数情况下都是利用无线通讯做媒介&#xff0c;让工作人员通…

【腾讯云 Cloud Studio 实战训练营】快速构建React完成点餐H5页面

一&#xff0c;前言 1.1 相关链接 官网地址&#xff1a;Cloud Studio 官方文档地址&#xff1a;Cloud Studio&#xff08;云端 IDE&#xff09;简介 | Cloud Studio 1.2 Cloud Studio&#xff08;云端 IDE&#xff09;简介 Cloud Studio 是基于浏览器的集成式开发环境&#…