Как создать свой дескриптор
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__`). Они позволяют элегантно реализовать свойства, валидацию, ленивые вычисления.