101 игра на python. Шпаргалки. Dataclass
Что такое dataclass?
dataclass — это декоратор, введенный в Python 3.7, который автоматически генерирует специальные методы (такие как __init__, __repr__, __eq__ и другие) для классов, которые в основном служат контейнерами для данных. Это избавляет от необходимости писать много шаблонного кода.
Использование dataclass в Python значительно упрощает работу с классами, предназначенными для хранения данных. Вместо того чтобы вручную определять методы __init__, __repr__, __eq__ и другие, достаточно просто объявить поля данных, а dataclass автоматически сгенерирует необходимый код. Это не только делает классы более лаконичными и понятными, но и улучшает читаемость кода, так как акцент смещается на данные, а не на техническую реализацию. Кроме того, автоматически сгенерированный код снижает вероятность ошибок, которые могут возникнуть при ручном написании.
Как использовать dataclass?
Для начала, тебе нужно импортировать декоратор dataclass из модуля dataclasses:
Затем ты помечаешь класс декоратором @dataclass, и определяешь поля данных, как обычные переменные класса с аннотациями типов:
В этом примере, Point — это dataclass, которая имеет два поля: x и y, оба целого типа. dataclass автоматически создаст: * Конструктор __init__, позволяющий создавать экземпляры класса, например Point(1, 2). * __repr__, возвращающий строковое представление объекта, например Point(x=1, y=2). * __eq__, позволяющий сравнивать объекты, например Point(1, 2) == Point(1, 2).
Пример простого использования
Варианты dataclass
dataclass предоставляет несколько параметров для настройки поведения:
init: Если True (по умолчанию), генерируется метод __init__. Если False, метод __init__ не создается.
repr: Если True (по умолчанию), генерируется метод __repr__. Если False, метод __repr__ не создается.
eq: Если True (по умолчанию), генерируется метод __eq__. Если False, метод __eq__ не создается.
order: Если True, генерируются методы сравнения (__lt__, __le__, __gt__, __ge__). По умолчанию False.
unsafe_hash: Если False (по умолчанию), метод __hash__ не генерируется. Если True, метод __hash__ будет сгенерирован, а dataclass станет хешируемым.
frozen: Если True, экземпляры класса будут неизменяемыми (read-only). По умолчанию False.
Примеры использования параметров
Отключаем метод __repr__ и делаем класс неизменяемым
2. Устанавливаем порядок, добавляем метод hash и делаем класс неизменяемым
Значения по умолчанию
Ты можешь задавать значения по умолчанию для полей:
При создании экземпляра класса, если значения не переданы, будет использовано значение по умолчанию.
Использование dataclass с изменяемыми типами
Будь осторожен при использовании изменяемых типов данных (списки, словари) в качестве значений по умолчанию. Они будут созданы только один раз и будут использоваться всеми экземплярами класса:
В примере выше изменения в bad1.items также отображаются в bad2.items. Это происходит из-за того, что оба экземпляра класса используют один и тот же список по умолчанию.
Чтобы этого избежать, используй dataclasses.field и default_factory:
В этом случае default_factory=list создаст новый пустой список для каждого нового экземпляра класса.
Удачи!
👉 GIT
Другие шпаргалки
Программирование на python
901 пост11.9K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
Приветствуется:
• уважение к читателям и авторам
• конструктивность комментариев
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
Не рекомендуется:
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
• нарушать правила Пикабу