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