Check

Дескрипторы в Python

Python Senior Яндекс
Что такое дескриптор в Python? Объясните разницу между data-descriptor и non-data-descriptor и приведите пример практического использования.
Ответы
Descriptor protocol
Дескриптор — объект, реализующий один или несколько методов протокола дескрипторов: `__get__`, `__set__`, `__delete__`. Он управляет доступом к атрибуту класса. Data-descriptor реализует `__set__` и обычно имеет высший приоритет (например, `property`, поля `dataclasses`). Non-data-descriptor реализует только `__get__` (например, функции в классе → методы). Пример простого дескриптора валидации: ```python class Positive: def __set__(self, instance, value): if value < 0: raise ValueError('value must be >= 0') instance.__dict__['_value'] = value def __get__(self, instance, owner): if instance is None: return self return instance.__dict__['_value'] class Account: balance = Positive() acc = Account() acc.balance = 10 ```