В чем разница между __getattribute__ и __getattr__ в Python

Python Middle Aston
В чем разница между __getattribute__ и __getattr__ в Python
Ответы
Оба метода используются для доступа к атрибутам, но работают в разных случаях: `__getattribute__` вызывается **всегда** при попытке доступа к любому атрибуту объекта, даже если атрибут существует. Это низкоуровневый метод, который реализует сам механизм поиска атрибутов. `__getattr__` вызывается **только если** атрибут не найден стандартными способами (через `__dict__`, дескрипторы и т.д.). Используется для обработки "несуществующих" атрибутов. Пример: ``` class Test: def __init__(self): self.x = 10 def __getattribute__(self, name): print(f"Getting {name}") return super().__getattribute__(name) def __getattr__(self, name): print(f"Attribute {name} not found") return 0 t = Test() print(t.x) # Вызовет __getattribute__ print(t.y) # Сначала __getattribute__, потом __getattr__ ``` Важно: в `__getattribute__` нужно быть осторожным с рекурсией - обращение к атрибутам внутри него должно идти через `super()` или напрямую к `__dict__`.