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

火山方舟向量数据库大模型

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

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

  
from dataclasses import dataclass  
  
  
@dataclass  
class User:  
 name: str  
 age: int  
  
  
p1 = 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: str  
 age: 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)邀请你们进群喔。

👇👇👇

关注公众号,测试干货及时送达picture.image

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

picture.image

往期 精彩回顾

picture.image

如何打造一篇优秀的简历

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

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

职场篇-初入职场如何选择行业和公司

面试逻辑题分享--字母数字映射关系推算题

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

你的求职简历中招了吗?

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

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

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

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

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

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

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

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

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

picture.image

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论