Протокол состоит из трёх методов:
__get__, __set__ и __delete__. Класс, реализующий их, перехватывает доступ к атрибуту. Из этого собрано больше, чем кажется:🔘
property, staticmethod, classmethod и super() — всё это дескрипторы, и в руководстве показаны их упрощённые реализации на Python;🔘 обычная функция становится связанным методом ровно потому, что функция — тоже дескриптор;
🔘
__set_name__ позволяет дескриптору узнать имя атрибута, под которым его объявили;🔘 разница между дескрипторами с записью и без определяет, кто победит: дескриптор или словарь экземпляра;
🔘 на этом же построены
__slots__ и модели в ORM.Практическая часть — готовый класс
Validator и валидаторы OneOf, Number и String: проверка типов и диапазонов при присваивании, без единой строчки проверок в коде, который этими полями пользуется.@zen_of_python