Это декоратор, предоставленный модулем
dataclasses
, который автоматически генерирует специальные методы, такие как __init__
, __repr__
, __eq__
, и другие, для вашего класса. Это упрощает создание классов, предназначенных для хранения данных, устраняя необходимость писать много шаблонного кода.Автоматически генерирует методы, сокращая шаблонный код.
Делает код более чистым и легким для понимания.
Обеспечивает удобные и мощные возможности для работы с данными.
Нужно импортировать его из модуля
dataclasses
и применить к классу. Внутри класса достаточно определить только поля данных.from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
# Примеры использования
person1 = Person(name="Alice", age=30)
person2 = Person(name="Bob", age=25)
print(person1) # Вывод: Person(name='Alice', age=30)
print(person2) # Вывод: Person(name='Bob', age=25)
print(person1 == person2) # Вывод: False
Инициализирует объект с заданными значениями атрибутов.
Возвращает строковое представление объекта, удобное для отладки.
Сравнивает объекты на равенство по их атрибутам.
Могут быть сгенерированы для сравнения объектов (если указано).
Вы можете настроить поведение
@dataclass
с помощью параметров, таких как order
, frozen
, и других.Генерирует методы для сравнения объектов.
Делает экземпляры неизменяемыми (immutable).
Пример
from dataclasses import dataclass
@dataclass(order=True, frozen=True)
class Person:
name: str
age: int
person1 = Person(name="Alice", age=30)
person2 = Person(name="Bob", age=25)
print(person1 > person2) # Вывод: True (поскольку 'Alice' > 'Bob' по алфавиту, если имена равны, сравниваются возраста)
# person1.age = 31 # Ошибка: FrozenInstanceError (поскольку класс заморожен)
Вы можете использовать функцию
field()
для настройки отдельных полей, например, для указания значений по умолчанию или исключения полей из методов __repr__
, __eq__
, и других.from dataclasses import dataclass, field
@dataclass
class Person:
name: str
age: int = 0
address: str = field(default="Unknown", repr=False)
person = Person(name="Alice")
print(person) # Вывод: Person(name='Alice', age=0)
Ставь 👍 и забирай 📚 Базу знаний