Что такое dataclass и зачем он нужен?
Декоратор @dataclass, появившийся в стандарте Python 3.7, представляет собой мощный инструмент для сокращения шаблонного кода при создании классов, которые предназначены в первую очередь для хранения данных. В классическом подходе разработчику приходится вручную писать метод инициализации __init__, методы строкового представления __repr__ и сравнения __eq__, что приводит к дублированию кода. Использование этого декоратора берет рутинную генерацию этих служебных методов на себя, делая исходный код более чистым, читаемым и компактным.
Основной задачей классов данных является удобное представление структуры информации, поэтому они идеально подходят для роли объектов передачи данных или доменных моделей. При объявлении полей вы можете указывать типы данных, что значительно улучшает статическую аналитику кода в современных редакторах и средах разработки. Более того, вы можете легко настроить поведение такого класса, передавая параметры в декоратор, например, установив флаг frozen=True для создания неизменяемых объектов или используя default_factory для безопасного определения изменяемых значений по умолчанию вроде списков.
На практике применение классов данных существенно ускоряет разработку и снижает вероятность появления опечаток в рутинных методах. Функция default_factory особенно полезна, когда вам нужно задать пустой список или словарь в качестве значения по умолчанию для поля экземпляра, так как стандартный способ через присваивание значению типа list создавал бы общий объект для всех экземпляров класса. Благодаря своей универсальности и простоте, эта возможность стала стандартом де-факто в современной экосистеме Python для организации структур данных.