Функция getattr()
возвращает значение атрибута данного объекта по его имени.
Имя атрибута name должно быть строкой. Если строка является именем одного из атрибутов объекта, результатом будет значение этого атрибута.
Если атрибут с указанным именем не существует, при передаче в функцию возвращается значение по умолчанию, а если нет значения по умолчанию, тогда генерируется исключение AttributeError.
Синтаксис функции getattr():
getattr(object, name, default)
Для чего используется getattr()?
- Когда невозможно вызвать object.x, потому что заранее неизвестно, какой атрибут понадобится.
- Когда точно неизвестно, имеет ли требуемый атрибут объекта значение. Например, вызов object.z вызовет исключение AttributeError, если атрибут y z не имеет значения. Но если мы можем указать какое-то значение по умолчанию для z, то вызов
getattr(object, 'z', 5)
вернет 5.
Рассмотрим простой пример:
class Person:
name = 'Vladislav Francesco'
phone = '+7928232425'
country = 'Russia'
# Получим существующий атрибут
person_phone = getattr(Person, 'phone')
print(person_phone)
# Удалим атрибут phone из объекта MyObj:
delattr(Person, 'phone')
# Пробуем получить атрибут phone из объекта Person после удаления:
person_phone = getattr(Person, 'phone', '+7928000000')
print(person_phone)
Результат:
+7928232425
+7928000000
Вот таким образом и используется getattr()