Модуль dataclass. Data-классы
Модуль dataclasses предоставляет декоратор dataclass, который позволяет создавать data-классы - подобные позволяют значительно сократить шаблонный код классов. Как правило, такие классы предназначены для хранения некоторого состояния, некоторых данных и когда не требуется какое-то поведение в виде функций.
Рассмотрим простейший пример:
Здесь определен класс Person, у которого в функции конструктора определены два атрибута: name и age. Далее создаем один объект этого класса и выводим значения его атрибутов на консоль.
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Модуль dataclasses предоставляет декоратор dataclass, который позволяет создавать data-классы - подобные позволяют значительно сократить шаблонный код классов. Как правило, такие классы предназначены для хранения некоторого состояния, некоторых данных и когда не требуется какое-то поведение в виде функций.
Рассмотрим простейший пример:
Здесь определен класс Person, у которого в функции конструктора определены два атрибута: name и age. Далее создаем один объект этого класса и выводим значения его атрибутов на консоль.
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Модуль dataclass. Data-классы
Теперь изменим эту программу, сделав класс Person data-классом, смотрим код:
Для создания data-класса импортируем из модуля dataclasses декоратор dataclass и применяем его к классу Person. И в этом случае в самом классе нам уже не надо указывать конструктор - функцию init. Мы просто указываем атрибуты. А Python потом сам сгенерирует конструктор, в который также мы можем передать значения для атрибутов объекта.
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Теперь изменим эту программу, сделав класс Person data-классом, смотрим код:
Для создания data-класса импортируем из модуля dataclasses декоратор dataclass и применяем его к классу Person. И в этом случае в самом классе нам уже не надо указывать конструктор - функцию init. Мы просто указываем атрибуты. А Python потом сам сгенерирует конструктор, в который также мы можем передать значения для атрибутов объекта.
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data
Модуль dataclass. Data-классы
Таким образом, мы уже сократили определение класса и сделали его более простым. Но генерацией метода init функциональность декоратора dataclass не ограничивается. В реальности data-класс будет аналогичен следующему, смотрим на первый пример:
В данном случае мы видим, что кроме функции init, также определяется функция repr() для возвращения строкового представления и функция eq() для сравнения двух объектов. Применение данных функций:
🐍 Укус питона // 💬 Чат // #теория #модули #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 позволяет сгенерировать дополнительный шаблонный код и вообще настроить генерацию кода, смотрим код:
Рассмотрим базовые параметры:
• 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 #декораторы
Применение параметров:
В данном случае включаем генерирование хеша и функций упорядочивания, а также явным образом переопределяем функцию repr для создания строкового представления объекта.
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
Модуль dataclass. Data-классы. Значения по умолчанию.
При необходимости атрибутам можно присвоить значения по умолчанию, если в конструкторе им не передаются значения, смотрим пример:
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
При необходимости атрибутам можно присвоить значения по умолчанию, если в конструкторе им не передаются значения, смотрим пример:
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
Модуль dataclass. Data-классы. Добавление дополнительного функционала.
Хотя data-классы предназначены прежде всего для хранения различных данных, но также в них можно определять поведение с помощью дополнительных функций:
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы
Хотя data-классы предназначены прежде всего для хранения различных данных, но также в них можно определять поведение с помощью дополнительных функций:
🐍 Укус питона // 💬 Чат // #теория #модули #dataclass #data #декораторы