Пруф тут
В общем, дескриптор - это атрибут объекта с «поведением привязки», доступ к атрибуту которого был переопределен методами в протоколе дескриптора. Этими методами являются __get __ (), __set __ () и __delete __ (). Если какой-либо из этих методов определен для объекта, он называется дескриптором. Поведение по умолчанию для доступа к атрибуту заключается в получении, установке или удалении атрибута из словаря объекта. Например, a.x имеет цепочку поиска, начинающуюся с .__ dict __ ['x'], затем введите (a) .__ dict __ ['x'] и продолжайте через базовые классы типа (a), исключая метаклассы. Если искомое значение является объектом, определяющим один из методов дескриптора, тогда Python может переопределить поведение по умолчанию и вместо этого вызвать метод дескриптора. То, где это происходит в цепочке приоритетов, зависит от того, какие методы дескриптора были определены. Дескрипторы - это мощный протокол общего назначения. Это механизм, лежащий в основе свойств, методов, статических методов, методов класса и super (). Они используются в самом Python для реализации новых классов стилей, представленных в версии 2.2. Дескрипторы упрощают базовый C-код и предлагают гибкий набор новых инструментов для повседневных программ Python.