1. 用途和主要功能
@dataclass 是 Python 3.7 引入的一个装饰器(位于标准库 dataclasses 模块中),用于简化'纯数据'类的定义。它自动为类生成常用的特殊方法(如 init、repr、eq 等),避免手动编写冗余模板代码。这样定义的数据类在代码量和可读性上都有显著优势,如便于维护、减少错误。使用 @dataclass 后,我们'可以直接创建和操作对象,而无需手动编写这些基础方法'。总体而言,@dataclass 提高了代码的一致性和可维护性,尤其适用于以存储数据为主的场景。
优势总结
- 自动生成 init、repr、eq 等方法,减少样板代码
- 支持字段默认值、类型注解等特性,使类定义更简洁清晰。
- 内置支持可选的排序、不可变(冻结)等功能,无需额外实现。
- 可与类型检查工具兼容,且保持 Python 代码风格。
2. 基本用法
基本用法示例如下:只需从 dataclasses 模块导入装饰器,使用 @dataclass 标注类,类体中定义带类型注解的字段即可。示例代码:
from dataclasses import dataclass
@dataclass
class InventoryItem:
"""库存项目的数据类示例"""
name: str
unit_price: float
quantity_on_hand: int = 0
def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand
如官方文档所示,上例自动生成了类似下面的 init() 方法
def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
self.name = name
self.unit_price = unit_price
self.quantity_on_hand = quantity_on_hand
此外,默认情况下还会生成符合字段顺序的 repr 和 eq 方法,使得打印实例和比较相等都更方便。例如:
item = InventoryItem("widget", , )
(item)
item2 = InventoryItem(, , )
item == item2


