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

