SobesLab логотип SobesLab

Ответ

__getattribute__ вызывается всегда при доступе к любому атрибуту объекта (если он определён в классе или наследуется). __getattr__ же вызывается только в том случае, если запрашиваемый атрибут не найден стандартным способом. Таким образом, __getattribute__ более низкоуровневый и легко может привести к бесконечной рекурсии, если неправильно вызвать, а __getattr__ – удобен для определения поведения “по умолчанию” для отсутствующих атрибутов. Часто __getattribute__ переопределяют для слежки за доступом, а __getattr__ – чтобы, например, динамически вычислять или проксировать отсутствующие атрибуты.