Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
19 Апр 2023
2 мин
1527

Что такое дескрипторы в Python

Узнайте о дескрипторах в Python — мощном инструменте для управления доступом к атрибутам и создания кастомизированных атрибутов.

Дескрипторы в Python — это объекты, которые реализуют один или несколько из специальных методов: __get__(), __set__() и __delete__(). Они позволяют управлять доступом к атрибутам класса и предоставляют механизм для кастомизации поведения при доступе к этим атрибутам.

Как работают дескрипторы

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

Пример дескриптора:

class Descriptor:
    def __get__(self, instance, owner):
        print(f"Getting value from {owner.__name__}")

class MyClass:
    attribute = Descriptor()

my_instance = MyClass()
my_instance.attribute  # вызывает Descriptor.__get__()

😉 В данном примере, при обращении к атрибуту attribute объекта my_instance, вызывается метод __get__() дескриптора Descriptor.

Зачем использовать дескрипторы

Дескрипторы могут быть полезны для различных целей, таких как:

  • Валидация значений атрибутов
  • Кеширование результатов вычислений
  • Логирование доступа к атрибутам

Пример использования дескриптора для валидации значений атрибутов:

class PositiveNumber:
    def __init__(self, value):
        self.value = value

    def __get__(self, instance, owner):
        return self.value

    def __set__(self, instance, value):
        if value < 0:
            raise ValueError("Value should be positive")
        self.value = value

class MyClass:
    positive_number = PositiveNumber(5)

my_instance = MyClass()
my_instance.positive_number = -3  # вызывает исключение ValueError

Итог

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

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий