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