Dataclasses 数据类
Contents
@dataclasses.dataclass() 是Python 3.7及更高版本中引入的一个装饰器,用于简化数据封装类(即主要用于存储数据的类)的编写。 这个装饰器可以自动为类生成一些特殊方法, 例如 init() 和 repr() , eq(),减少了重复代码的编写。
例如以下代码:
|
|
将添加多项内容,包括如下所示的 init():
|
|
自动添加方法的好处,可以减少__init__方法重复,可以对类属性自定义比较方法__eq__,
可读性要强,操作灵活。
适用场景
- 当需要一个简单的类来存储数据时,例如配置、记录或其他结构化数据。
- 在需要比普通字典更结构化、但不需要复杂方法的场景。
- 当你希望类具有自动实现的比较和打印方法时。
原理
- 自动方法生成:dataclass 装饰器会根据类中定义的字段自动创建 init、repr 和 eq 方法。这样,就不需要手动编写这些通常都很相似的方法。
- 类型注解:dataclass 使用Python的类型注解来识别类中的字段。
- 可定制性:可以通过传递参数给 @dataclass 装饰器来定制其行为,如设置 frozen=True 使实例不可变。
高级用法
- 默认值:可以为数据类的字段指定默认值。
- 不可变数据类:通过设置 frozen=True,你可以创建不可变的实例。
- 继承:数据类可以继承其他数据类。
- 字段元数据:可以使用 dataclasses.field 来为字段提供更多信息,如自定义默认值工厂、排除字段等。