🐍 Укус питона 🐍
2.88K subscribers
778 photos
4 videos
279 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
Модуль dataclass. Data-классы

Модуль dataclasses предоставляет декоратор dataclass, который позволяет создавать data-классы - подобные позволяют значительно сократить шаблонный код классов. Как правило, такие классы предназначены для хранения некоторого состояния, некоторых данных и когда не требуется какое-то поведение в виде функций.

Рассмотрим простейший пример:

Здесь определен класс Person, у которого в функции конструктора определены два атрибута: name и age. Далее создаем один объект этого класса и выводим значения его атрибутов на консоль.

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Модуль dataclass. Data-классы

Теперь изменим эту программу, сделав класс Person data-классом, смотрим код:

Для создания data-класса импортируем из модуля dataclasses декоратор dataclass и применяем его к классу Person. И в этом случае в самом классе нам уже не надо указывать конструктор - функцию init. Мы просто указываем атрибуты. А Python потом сам сгенерирует конструктор, в который также мы можем передать значения для атрибутов объекта.

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Модуль dataclass. Data-классы

Таким образом, мы уже сократили определение класса и сделали его более простым. Но генерацией метода init функциональность декоратора dataclass не ограничивается. В реальности data-класс будет аналогичен следующему, смотрим на первый пример:

В данном случае мы видим, что кроме функции init, также определяется функция repr() для возвращения строкового представления и функция eq() для сравнения двух объектов. Применение данных функций:

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Параметры декоратора dataclass

С помощью параметров декоратор dataclass позволяет сгенерировать дополнительный шаблонный код и вообще настроить генерацию кода, смотрим код:

Рассмотрим базовые параметры:

• init: если равно True, то генерируется функция init(). По умолчанию равно True
• repr: если равно True, то генерируется функция repr(), которая возвращает строковое представление объекта. По умолчанию равно True
• eq: если равно True, то генерируется функция eq(), которая сравнивает два объекта. По умолчанию равно True
• order: если равно True, то генерируются функции lt (операция <), le (<=), gt (>), ge (>=), которые применяются для упорядочивания объектов. По умолчанию равно False
• unsafe_hash: если равно True, то генерируется функция hash(), которая возвращает хеш объекта. По умолчанию равно False

Кроме того, те функции, которые создаются по умолчанию, могут быть переопределены.

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
Параметры декоратора dataclass. Продолжение.

Применение параметров:

В данном случае включаем генерирование хеша и функций упорядочивания, а также явным образом переопределяем функцию repr для создания строкового представления объекта.

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
Модуль dataclass. Data-классы. Значения по умолчанию.

При необходимости атрибутам можно присвоить значения по умолчанию, если в конструкторе им не передаются значения, смотрим пример:

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
Модуль dataclass. Data-классы. Добавление дополнительного функционала.

Хотя data-классы предназначены прежде всего для хранения различных данных, но также в них можно определять поведение с помощью дополнительных функций:

🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы