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自动为我们创建了以下方法:
__init__: 自动添加了带有name和age参数的构造函数,我们可以用User("小博", 18)的形式创建对象。
__repr__: 自动添加了一个友好的表示对象的字符串方法,我们可以通过print()函数查看对象的内容。
__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)邀请你们进群喔。
👇👇👇
关注公众号,测试干货及时送达
为感谢所有粉丝的关注和长期以来的支持,特在公众号后台为大家准备了一些资料,可在后台回复【百宝箱/关键字】获取相关链接,资料会持续更新,有需要的可以先私聊作者补充文档。
往期精彩回顾
如何打造一篇优秀的简历
混迹职场多年的你,面试真的准备好了吗?
你还在抱怨职场的不公吗?
职场篇-初入职场如何选择行业和公司
面试逻辑题分享--字母数字映射关系推算题
非技术性的面试中的技巧性回答集锦(建议收藏)
你的求职简历中招了吗?
测试编程笔试题No.1-输入表格列的英文名称,返回其对应的数字序号
软件测试面试题分享-No.1
软件测试面试题分享-No.2
软件测试面试题分享-No.3
软件测试面试题分享-No.4
软件测试面试题分享-No.5
软件测试面试题分享-No.6(某某某公司面试题)
软件测试面试题分享-No.7(接口自动化面试题)
xxx公司测试岗位企业面试题