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

浙公网安备 33010602011771号