Встречается на собеседованиях • сегодня

Как создать свой дескриптор

Дескриптор — это класс, реализующий протокол дескриптора (__get__, __set__, __delete__). Он позволяет контролировать доступ к атрибутам другого класса.

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

python
class AgeValidator:
    def __set_name__(self, owner, name):
        self.name = name

    def __get__(self, instance, owner):
        return instance.__dict__.get(self.name)
text
def __set__(self, instance, value):
    if not isinstance(value, int) or value < 0:
        raise ValueError("Age must be a positive integer")
    instance.__dict__[self.name] = value

class Person:
age = AgeValidator()

text
def __init__(self, age):
    self.age = age
text

Ключевые моменты:
1. `__get__` вызывается при чтении атрибута
2. `__set__` вызывается при присвоении значения
3. `__delete__` (необязательный) вызывается при `del`
4. `__set_name__` (Python 3.6+) автоматически получает имя атрибута

Дескрипторы бывают data (реализуют `__set__`) и non-data (только `__get__`). Они позволяют элегантно реализовать свойства, валидацию, ленивые вычисления.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы