Comments 3
Спасибо за полное погружение
Вопрос, есть какой-нибудь реальный кейс, когда нужно прибегнуть к самостоятельному написанию дескриптора?
Зачастую они уже все реализованы и лезть под капот не нужно. Или у нас уже есть для этого более явная концепция в виде геттеров и сеттеров, или декораторов, которые позволяют реализовать то же самое. Декораторы - не явное поведение, а дескрипторы ещё менее явное.
Синтетические примеры напоминают ментальную разминку.
Здравствуйте, спасибо за комментарий
Реальный кейс 1
Я работал на проекте, где все провайдеры (репозитории, интеракторы, юзкейсы, контроллеры) являются синглтонами, из-за этого у меня не было возможности во время запроса пользователя записывать какие-либо данные в экземпляр провайдера.
Я добавил дескриптор, который при присваивании записывает данные в ContextVar контекста запроса, а при запросе атрибута, возвращает их от туда же.
Реальный кейс 2
У меня на проекте есть Entity на основе Pydantic, которые я заполняю данными из django QuerySet.
Помимо этого написана логика, на то, чтобы в метод репозитория при вызове можно было передать DTO, который нужно вернуть вместо Entity.
Так как в Entity есть дополнительные вычисляемые свойства и их терять не хочется, сначала QuerySet конвертируется в Entity, а потом в DTO.
Так же в запросе может участвовать не только одна таблица базы данных, мне нужно, чтобы значения соответствующих полей с O2O, M2O и M2M связями также для начала конвертировались в соответствующих им Entity.
Для этого был написан дескриптор для вложенных Entity (NestedEntity), который использует в объемлющих Entity.
Реальный кейс 3
Описан в текущей статье в разделе про вложенные дескрипторы
Дескрипторы Python. Подробное руководство