在 Python 中,类通常用于封装数据和行为。传统方式下,定义一个类并实现初始化方法 __init__、表示方法 __repr__ 和比较方法 __eq__ 等需要编写大量重复代码。对于主要用于存储数据的类,这些样板代码显得繁琐且易出错。
@dataclass 装饰器就是为简化此类场景而设计的,它自动生成初始化函数、表示函数、比较函数等,使数据类的定义简洁、清晰,并保持类型提示完整。
什么是 @dataclass
@dataclass 是 Python 3.7 引入的内置装饰器(位于 dataclasses 模块中),用于声明'数据类'(Data Class)。
数据类的核心特点包括:
- 自动生成初始化方法:根据类属性生成
__init__方法。 - 自动生成表示方法:生成
__repr__方法,便于调试和日志输出。 - 自动生成比较方法:可选生成
__eq__、__lt__等方法,实现对象比较。 - 支持类型提示:属性可通过类型注解声明,增强可读性和静态分析能力。
- 可选字段控制:可通过模块中的
field()自定义默认值、初始化行为、比较参与情况等。
说明:默认情况下,
@dataclass会生成__init__、__repr__和__eq__方法,但不会生成排序相关方法(需要显式指定order=True)。
基本用法
定义数据类
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
上述代码会自动生成类似以下的底层逻辑:
def __init__(self, x: float, y: float): ...
def __repr__(self): ...
def __eq__(self, other): ...
使用数据类
p1 = Point(3, 4)
p2 = Point(3, 4)
p3 = Point(, )
(p1)
(p1 == p2)
(p1 == p3)

