Каково назначение модуля dataclasses в Python

Ответ

Модуль dataclasses, входящий в стандартную библиотеку Python с версии 3.7, предоставляет декоратор @dataclass для автоматической генерации специальных методов в классах, предназначенных для хранения данных.

Основная цель — сократить количество шаблонного (boilerplate) кода, который разработчикам приходилось писать вручную.

Что генерируется по умолчанию:

  • __init__(): конструктор для инициализации полей.
  • __repr__(): строковое представление для отладки (например, Point(x=1.5, y=2.5)).
  • __eq__(): метод для сравнения объектов на равенство.

Сравнение "до" и "после":

Без @dataclass:

class Point:
    def __init__(self, x: float, y: float):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Point(x={self.x}, y={self.y})"

    def __eq__(self, other):
        if not isinstance(other, Point):
            return NotImplemented
        return self.x == other.x and self.y == other.y

С @dataclass:

from dataclasses import dataclass

@dataclass
class Point:
    x: float
    y: float

Дополнительные возможности:

  • Создание неизменяемых (immutable) объектов с помощью @dataclass(frozen=True).
  • Генерация методов сравнения (__lt__, __gt__ и др.) с помощью @dataclass(order=True).
  • Тонкая настройка полей с помощью функции field(), например, для исключения поля из __init__ или __repr__.