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

Python Senior Без компании
Как создать свой дескриптор
Ответы
Дескриптор — это класс, реализующий протокол дескриптора (`__get__`, `__set__`, `__delete__`). Он позволяет контролировать доступ к атрибутам другого класса. Пример дескриптора для валидации возраста: ``` class AgeValidator: def __set_name__(self, owner, name): self.name = name def __get__(self, instance, owner): return instance.__dict__.get(self.name) 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() def __init__(self, age): self.age = age ``` Ключевые моменты: - `__get__` вызывается при чтении атрибута - `__set__` вызывается при присвоении значения - `__delete__` (необязательный) вызывается при `del` - `__set_name__` (Python 3.6+) автоматически получает имя атрибута Дескрипторы бывают data (реализуют `__set__`) и non-data (только `__get__`). Они позволяют элегантно реализовать свойства, валидацию, ленивые вычисления.