Разница между `__getattr__` и `__getattribute__`
Python
Senior
Яндекс
Объясните разницу между методами `__getattr__` и `__getattribute__` в классе. Когда целесообразно использовать каждый из них?
Ответы
__getattr__ vs __getattribute__
`__getattribute__` вызывается вообще для любого доступа к атрибуту экземпляра. Неправильная реализация легко приводит к рекурсии и сломанному классу.
`__getattr__` вызывается только тогда, когда обычный поиск атрибута завершился неудачно (атрибут не найден в `__dict__`, `__getattribute__` и т.д.).
Часто:
- `__getattr__` используют для ленивой загрузки, проксирования, fallback-логики;
- `__getattribute__` — для очень низкоуровневых вещей (прокси-объекты, трейсинг), и с большой осторожностью.