Ответ
Датаклассы (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)
делает экземпляры класса неизменяемыми, что полезно для создания безопасных объектов данных.