Python

Учебник по дескрипторам Python

Учебник по дескрипторам Python
Полезная техника для написания универсального кода, который может быть повторно использован между классами, поддерживается дескрипторами Python или более широко известными как дескрипторы. Они могут показаться близкими к понятию наследования, но это не так. Это прямой метод захвата доступа к атрибутам с привязкой. Дескрипторы - это основная функция Python, которая управляет большей частью колдовства, скрытой под покровом языка. Если вы когда-либо чувствовали, что дескрипторы Python с небольшими функциональными реализациями являются сложной темой, то этот учебник - лучшая платформа, которая поможет вам понять эту мощную функцию.

Дескрипторные методы

Чтобы четко сформулировать это, класс, реализующий __получать_(), __набор()_, или же __Удалить()_ функция протокола дескриптора для объекта классифицируется как «дескриптор». Для управления параметрами различных классов, использующих объект в качестве ссылки, создаются дескрипторы Python. Вот три указанных метода, которые будут использоваться в дескрипторах:

__получать__(): Когда вы пытаетесь извлечь данные, __получать__() вызывается атрибут, и все, что он предоставляет, это то, что будет предоставлено коду, требующему значение одной переменной. Он классифицируется как дескриптор, не относящийся к данным, и доступен только для чтения.

__набор__(): Функция __набор__() вызывается для настройки значений параметров, и эта функция вам ничего не возвращает. Он известен как дескриптор данных, который не только читается, но и записывается.

__Удалить__(): Всякий раз, когда параметр удаляется из объекта, __Удалить__() функция называется. Он известен как дескриптор данных, который не только читается, но и записывается.

Вам нужно только обеспечить соблюдение протокола дескриптора, если вы используете дескрипторы Python в своем скрипте. К важнейшим функциям протокола относятся: получать() а также набор() имеющий последующую подпись.

__get __ (self, obj, type = None) -> объект
__set __ (self, obj, value) -> Нет

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

Пример:

Здесь мы определили два класса. В дескрипторе класса мы определили методы дескриптора. в получать(), self является экземпляром дескриптора val, он получит значение Geeks и сохранит его. Затем он создаст строку с 'for', прикрепленную между предоставленным атрибутом. Дескриптор класса (объект):

def __get __ (self, obj, objtype):
вернуть « для ».формат (самостоятельно.val, self.val)

Затем он вернет значение методу set (). Затем эта функция проверяет значение, является ли оно строкой или нет. Если значение является строкой, оно будет сохранено в атрибуте с именем 'val'. Если значение не является строкой, оно вызовет исключение.

def __set __ (self, obj, val):
если isinstance (val, str):
себя.val = val
еще:
поднять TypeError («Имя должно быть строкой»)

После этого значение будет напечатано в виде строки GeeksforGeeks.

класс GFG (объект):
val = Дескриптор ()
g = GFG ()
грамм.val = «Гики»
печать (г.val)

Когда вы попытаетесь запустить этот код, вы получите следующий результат:

GeeksforGeeks

Назначение дескрипторов

Опишем класс под названием «дом» с тремя характеристиками, а именно: местонахождение, площадь и цена. Вы можете использовать функцию __в этом__() для инициализации атрибутов класса.

класс дома:

def __init __ (я, местоположение, площадь, цена):

Затем вы можете использовать функцию __str __ (), которая может вернуть результат трех атрибутов, которые вы можете передать классу при создании элемента. Функция __str __ () вернет строку.

Когда вы выполните этот код, он отобразит, казалось бы, правильный вывод.

Теперь попробуем изменить цену дома на отрицательное значение, как показано ниже, и выполнить код.

Нет никаких изменений, кроме отрицательного знака, как показано в выходных данных. Подожди! Что-то здесь не так, не так ли? Почему цена дома отрицательная. Python позволяет это, потому что Python - это универсальная среда разработки, которая специально не поддерживает проверку типов.

Давайте инициализируем оператор if в __в этом__() функция для создания исключения, если значение или цена меньше нуля.

На данный момент вы можете заметить, что он работает хорошо, и если цена меньше нуля, код генерирует ошибку значения.

Как мы могли понять, __в этом_() функция является конструктором и вызывается только один раз, когда вы создаете объект класса. Следовательно, позже настраиваемая проверка типов не будет работать. Python предоставляет дескрипторы, которые специализируются на решении всех вышеперечисленных проблем. Теперь давайте начнем использовать дескрипторы в том же примере, чтобы хорошо это понять.

Класс дескриптора ' __в этом_() функция имеет локальную переменную __price на 0. Двойное подчеркивание в начале означает, что параметр является частным. Он используется для отличия параметра цены класса дескриптора от домашнего класса.

В __получать__() метод вернет цену. Экземпляр атрибута содержит h1, который является экземпляром дескриптора. Владелец атрибута ссылается на название класса 'home' и возвращает цену.

Функция __набор__() имеет атрибут пример который содержит h1, и значение, которое должно быть присвоено. Проверка используется для подтверждения значения. Если значение является целым числом, оно будет распечатано, в противном случае код сгенерирует исключение Type Error. Если значение меньше нуля, в код будет выброшено исключение Value Error.

В __Удалить__() функция выполняется при удалении атрибута параметра из объекта.

Домашний класс остается прежним, хотя экземпляр цена класса Descriptor () добавлен. в __в этом_() функция, добавьте атрибут price к цене экземпляра, и она вызовет __набор_() функция.

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

Теперь попробуйте выполнить код со строковым значением.

Это вызовет исключение ошибки типа.

Существующее значение экземпляра переопределяется при формировании нового экземпляра, поскольку дескрипторы связаны с классом, а не с экземпляром. Взгляните на ниже:

Первое значение было заменено вторым.

Заключение

Мы можем понять, почему дескрипторы из Python стали такой увлекательной темой и в какие сценарии использования вы можете их добавить, пройдя через это руководство.

Как использовать Xdotool для стимулирования щелчков мыши и нажатия клавиш в Linux
Xdotool - это бесплатный инструмент командной строки с открытым исходным кодом для имитации щелчков мыши и нажатия клавиш. В этой статье будет краткое...
5 лучших эргономичных компьютерных мышей для Linux
Вызывает ли длительное использование компьютера боль в запястье или пальцах?? Вы страдаете от скованности суставов и постоянно должны пожимать руки? В...
Как изменить настройки мыши и сенсорной панели с помощью Xinput в Linux
Большинство дистрибутивов Linux по умолчанию поставляются с библиотекой libinput для обработки событий ввода в системе. Он может обрабатывать события ...