Многие разработчики сталкиваются с необходимостью создавать подобные классы:
class RegularGuitar:
def __init__(self, brand, model):
self.brand = brand
self.model = model
Уже на этом примере можно заметить избыточность: идентификаторы brand и model повторяются несколько раз. Более сложный класс может также содержать переопределенные методы eq и repr.
Для упрощения процесса создания таких классов модуль dataclasses предлагает декоратор @dataclass. С его помощью аналогичный код будет выглядеть так:
from dataclasses import dataclass
@dataclass
class Guitar:
brand: str
model: str
Теперь классы стали более читаемыми и лаконичными, а также сохраняют важные методы, такие как
__eq__ и __repr__, которые автоматически генерируются.