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, если актуально

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


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

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

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

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

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