Что такое датаклассы (dataclasses) в Python

Ответ

Датаклассы (dataclasses) — это специальный декоратор @dataclass, доступный в стандартной библиотеке Python начиная с версии 3.7. Он автоматически генерирует для класса специальные методы, такие как __init__(), __repr__(), __eq__() и другие.

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

Пример:

Вместо того чтобы писать так:

class PointOld:
    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y

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

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

С датаклассом код становится намного короче и чище:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p1 = Point(10, 20)
p2 = Point(10, 20)

print(p1)  # Вывод: Point(x=10, y=20)
print(p1 == p2) # Вывод: True

Ключевые возможности:

  • Автогенерация методов: __init__, __repr__, __eq__, __ne__, __lt__, __le__, __gt__, __ge__ (последние 4 при order=True).
  • Значения по умолчанию: Можно задавать значения по умолчанию для полей.
  • Неизменяемость (Immutability): Декоратор @dataclass(frozen=True) делает экземпляры класса неизменяемыми, что полезно для создания безопасных объектов данных.