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)邀请你们进群喔。
 
   

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

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

Python中的dataclass:简化数据类的创建_第1张图片

往期精彩回顾

0c33bae728fa0f24cd4fd206cff65120.png

如何打造一篇优秀的简历

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

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

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

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

你的求职简历中招了吗?

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

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

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

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

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

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

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

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

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

07ed619cbde9361e13263bf7d38199ed.png

你可能感兴趣的:(python,java,前端,开发语言,linux)