getattribute участвует в обычном доступе к любому атрибуту, а getattr вызывается как fallback после AttributeError. Поиск учитывает не только dict, но и дескрипторы и MRO.
Чем на низком уровне отличаются методы __getattribute__ и __getattr__ при поиске в __dict__?
__getattribute__ участвует в обычном доступе к любому атрибуту, а __getattr__ вызывается как fallback после AttributeError. Поиск учитывает не только __dict__, но и дескрипторы и MRO.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
getattribute участвует в обычном доступе к любому атрибуту, а getattr вызывается как fallback после AttributeError. Поиск учитывает не только dict, но и дескрипторы и MRO.
В стандартном доступе экземпляра data descriptor имеет приоритет над словарём экземпляра, затем рассматриваются non-data descriptors и атрибуты класса. slots может хранить значения без обычного dict. В переопределённом getattribute используйте object.getattribute(self, name), чтобы не вызвать рекурсию через self.name. Не подавляйте AttributeError бездумно: это меняет поведение fallback.
Источник: docs.python.org.