日日行,不怕千万里;常常做,不怕|

__username

园龄:2年4个月粉丝:12关注:2

📂python
🔖Python
2024-11-13 10:19阅读: 55评论: 0推荐: 0

python中 dataclass使用

dataclass

在 Python 中,dataclass 是一种简化创建数据类的方式,提供了自动生成的初始化方法 (__init__)、表示方法 (__repr__)、比较方法 (__eq__) 等。dataclass 可以减少手动编写这些方法的繁琐代码。下面是 dataclass 的一些基本用法:

1. 基本用法

from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int

在这个示例中,Person 是一个数据类,nameage 是它的属性。使用 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 的优点在于简洁、直观和减少手动代码编写,尤其适合存储简单数据结构。

其它参考

https://www.cnblogs.com/wang_yb/p/18077397

posted @   __username  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有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/调度器

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起