python中 dataclass使用
dataclass
在 Python 中,dataclass
是一种简化创建数据类的方式,提供了自动生成的初始化方法 (__init__
)、表示方法 (__repr__
)、比较方法 (__eq__
) 等。dataclass
可以减少手动编写这些方法的繁琐代码。下面是 dataclass
的一些基本用法:
1. 基本用法
from dataclasses import dataclass @dataclass class Person: name: str age: int
在这个示例中,Person
是一个数据类,name
和 age
是它的属性。使用 dataclass
后,Python 会自动生成 __init__
、__repr__
等方法,所以可以直接创建实例:
p = Person(name="Alice", age=30) print(p) # 输出: Person(name='Alice', age=30)
2. 添加默认值
可以为属性添加默认值,或者使用 field
函数来指定默认值和选项。
from dataclasses import dataclass, field @dataclass class Person: name: str age: int = 18 # 设置默认年龄 hobbies: list = field(default_factory=list) # 使用工厂函数来生成默认值
上面代码中的 hobbies
属性使用了 default_factory
来指定默认值为空列表。这样做是为了避免多个实例共享同一个列表对象的问题。
3. 可变参数的 field
dataclass
中的 field
还可以设置其他选项,比如设置某个属性不参与比较或排除在初始化之外。
from dataclasses import dataclass, field @dataclass class Person: name: str age: int = 18 _id: int = field(repr=False, compare=False) # _id不会出现在repr和比较中
4. __post_init__
方法
dataclass
允许在初始化后自定义逻辑,使用 __post_init__
方法可以实现。例如,在初始化时做一些校验或处理。
from dataclasses import dataclass @dataclass class Person: name: str age: int def __post_init__(self): if self.age < 0: raise ValueError("年龄不能为负数")
5. 数据类的比较
默认情况下,dataclass
生成的类会包含 __eq__
、__lt__
等比较方法,这样可以直接比较两个数据类的实例。
dataclass(order=True) class Person: name: str age: int p1 = Person(name="Alice", age=30) p2 = Person(name="Bob", age=25) print(p1 > p2) # 输出: True (因为p1的年龄大)
总结
dataclass
的优点在于简洁、直观和减少手动代码编写,尤其适合存储简单数据结构。
其它参考
本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18543287
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2023-11-13 RuntimeError: The scheduler seems to be running under uWSGI, but threads have been disabled. You must run uWSGI with the --enable-threads option for the scheduler to work报错
2023-11-13 监控/scheduler/调度器