8

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.

Примеры использования параметров

  1. Отключаем метод __repr__ и делаем класс неизменяемым

2. Устанавливаем порядок, добавляем метод hash и делаем класс неизменяемым

Значения по умолчанию

Ты можешь задавать значения по умолчанию для полей:

При создании экземпляра класса, если значения не переданы, будет использовано значение по умолчанию.

Использование dataclass с изменяемыми типами

Будь осторожен при использовании изменяемых типов данных (списки, словари) в качестве значений по умолчанию. Они будут созданы только один раз и будут использоваться всеми экземплярами класса:

В примере выше изменения в bad1.items также отображаются в bad2.items. Это происходит из-за того, что оба экземпляра класса используют один и тот же список по умолчанию.

Чтобы этого избежать, используй dataclasses.field и default_factory:

В этом случае default_factory=list создаст новый пустой список для каждого нового экземпляра класса.

Удачи!

👉 GIT

Другие шпаргалки

Когда использовать dict и list
dict vs SimpleNamespace
Синглтон (Singleton)
Структуры данныx python
Переменные
Строки
Функции

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества