Короткий ответ
Data class — класс, помеченный декоратором @dataclass из одноимённого модуля, для хранения данных. Достаточно описать поля с аннотациями типов, и декоратор автоматически сгенерирует конструктор, строковое представление и сравнение по содержимому полей.
Как это работает подробнее
- Автогенерация.
@dataclassсам создаёт__init__(), модифицированный__repr__()и__eq__(), которые для обычного класса пишут вручную. - Сравнение по данным. Два экземпляра с одинаковым содержимым равны, тогда как обычный класс без
__eq__сравнивает по идентичности объектов в памяти и вернётFalse. - Настройка. Полям можно задавать значения по умолчанию, а поведение генерации методов регулируется параметрами декоратора.
- Выгода. Такой класс делает код короче, читаемее и уменьшает число ошибок, связанных с ручным написанием служебных методов.
Пример кода
Dataclass Article со сравнением по данным
from dataclasses import dataclass
@dataclass
class Article:
title: str
author: str
language: str = 'Python'
a1 = Article('DataClasses', 'Ivan')
a2 = Article('DataClasses', 'Ivan')
print(a1) # Article(title='DataClasses', author='Ivan', language='Python')
print(a1 == a2) # True — сравнение по данным, а не по адресуЧто использовать на практике
- Модели данных. Используй dataclass для структур, хранящих набор полей, вместо классов с рукописным
__init__. - Неизменяемость. Если объект не должен меняться после создания, задавай параметр
frozen=True. - Аннотации типов. Всегда описывай типы полей: они нужны декоратору и улучшают читаемость кода.