Каков результат обращения к атрибуту объекта в Python и что произойдет, если атрибут отсутствует?

Ответ

При обращении к атрибуту объекта в Python, например object.attribute, происходит поиск этого атрибута. Результат зависит от того, найден ли он.

  1. Атрибут найден: Возвращается его значение.
  2. Атрибут не найден: Генерируется исключение AttributeError, что сигнализирует о невозможности найти указанное имя в пространстве имен объекта.

Пример:

class User:
    def __init__(self, name):
        self.name = name

user = User("Alice")

# Успешный доступ
print(user.name)  # Выведет: Alice

# Попытка доступа к несуществующему атрибуту
try:
    print(user.age)
except AttributeError as e:
    print(e)  # Выведет: 'User' object has no attribute 'age'

Безопасный доступ к атрибуту

Чтобы избежать падения программы из-за AttributeError, можно использовать встроенную функцию getattr(), которая позволяет указать значение по умолчанию.

# Безопасно получаем атрибут 'age'. Если его нет, вернется 0.
age = getattr(user, 'age', 0)
print(age)  # Выведет: 0

# Получаем существующий атрибут
name = getattr(user, 'name', 'Default Name')
print(name) # Выведет: Alice