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

Как __getattr__ и __getattribute__ влияют на получение атрибута

__getattr__ и __getattribute__ — это методы для управления доступом к атрибутам, но работают они по-разному:

  1. __getattribute__ вызывается всегда при обращении к любому атрибуту, даже если он существует. Если атрибут не найден, он должен вызвать AttributeError, иначе может возникнуть рекурсия.
  1. **__getattr__** вызывается **только если** атрибут не найден стандартными способами (через dict`, свойства и т.д.).

Пример:

python
class Example:
    def __getattribute__(self, name):
        print(f"__getattribute__: {name}")
        return super().__getattribute__(name)  # Важно!

    def __getattr__(self, name):
        print(f"__getattr__: {name}")
        return 42

obj = Example()
obj.x = 10
print(obj.x)  # Вызовет __getattribute__
print(obj.y)  # Сначала __getattribute__, потом __getattr__

Важно:

  • __getattribute__ требует вызова super() или обработки AttributeError.
  • __getattr__ — «последняя линия защиты».
  • Переопределение __getattribute__ может замедлить код.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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