Sobes.tech
Back to questions
Junior — Middle
58

Можете ли вы объяснить, что такое дескриптор в языке Python и как он работает?

Answer from AI

sobes.tech AI

В Python дескриптор — это объект, который управляет доступом к атрибутам другого объекта через методы __get__, __set__ и __delete__. Дескрипторы позволяют контролировать чтение, запись и удаление атрибутов, реализуя логику на уровне доступа.

Пример простого дескриптора для проверки типа значения:

class Typed:
    def __init__(self, name, expected_type):
        self.name = name
        self.expected_type = expected_type

    def __get__(self, instance, owner):
        return instance.__dict__.get(self.name)

    def __set__(self, instance, value):
        if not isinstance(value, self.expected_type):
            raise TypeError(f"Ожидался тип {self.expected_type.__name__}")
        instance.__dict__[self.name] = value

    def __delete__(self, instance):
        raise AttributeError("Удаление запрещено")

class Person:
    name = Typed('name', str)
    age = Typed('age', int)

p = Person()
p.name = "Иван"  # работает
p.age = 30        # работает
# p.age = 'тридцать'  # вызовет TypeError

Таким образом, дескрипторы используются для реализации свойств, валидации и других механизмов контроля доступа к атрибутам.