Приходилось ли писать собственные дескрипторы
Python
Middle
Без компании
Приходилось ли писать собственные дескрипторы
Ответы
Да, приходилось. Дескрипторы в Python — это мощный механизм для управления доступом к атрибутам. Они реализуются через протокол дескрипторов (`__get__`, `__set__`, `__delete__`). Чаще всего используются для валидации данных, ленивых вычислений или управления доступом.
Пример дескриптора для валидации возраста:
```
class AgeValidator:
def __set__(self, instance, value):
if not isinstance(value, int) or value < 0:
raise ValueError("Age must be a positive integer")
instance.__dict__['age'] = value
def __get__(self, instance, owner):
return instance.__dict__.get('age')
class Person:
age = AgeValidator()
p = Person()
p.age = 25 # OK
p.age = -5 # ValueError
```
Ключевые моменты:
- Дескрипторы бывают data (реализуют `__set__`) и non-data (только `__get__`)
- `__get__` принимает instance и owner (класс)
- Для хранения значения лучше использовать `instance.__dict__`
- Дескрипторы работают только на уровне класса
Часто используются в ORM (например, Django модели) и для реализации property-like поведения с повторным использованием кода.