Встречается на собеседованиях • сегодня

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

Оба метода используются для доступа к атрибутам, но работают в разных случаях:

__getattribute__ вызывается всегда при попытке доступа к любому атрибуту объекта, даже если атрибут существует. Это низкоуровневый метод, который реализует сам механизм поиска атрибутов.

__getattr__ вызывается только если атрибут не найден стандартными способами (через __dict__, дескрипторы и т.д.). Используется для обработки "несуществующих" атрибутов.

Пример:

python
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__.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы