Сообщить об ошибке.

Функция getattr() в Python, значение атрибута по имени

Позволяет получить значение атрибута объекта по его имени

Синтаксис:

getattr(object, name, default)

Параметры:

  • object - объект, значение атрибута которого требуется получить
  • name - имя атрибута объект, должно быть строкой
  • default - значение по умолчанию, которое будет возвращено, если имя атрибута name отсутствует.

Возвращаемое значение:

  • значение именованного атрибута объекта

Описание:

Функция getattr() возвращает значение атрибута указанного объекта object по его имени name.

Имя атрибута name должно быть строкой. Если строка является именем name одного из атрибутов объекта object, результатом является значение этого атрибута.

Если атрибут с таким именем name не существует, возвращается значение по умолчанию default, если оно передано в функцию, в противном случае бросается исключение AttributeError.

Нужно понимать и помнить что вызов getattr(object, 'x') полностью эквивалентно вызову object.x. Есть только два широко известных случая, когда функция getattr() может быть очень полезна:

  • когда невозможно вызвать object.x, т. к. заранее не известно, какой атрибут будет нужен. Например атрибут представляет собой строковую переменную. Очень часто встречается в метапрограммировании (полезно знать об этом).
  • когда точно неизвестно есть ли значение у нужного атрибута объекта. Например вызов object.z вызовет исключение AttributeError, если y атрибута z нет значения. Но если мы сможем указать какое то значение по умолчанию для z, то вызов getattr(object, 'z', 5) вернет 5.

Примеры получения значения атрибута по имени.

class MyObj:
    name = 'Chuck Norris'
    phone = '+666111000'
    country = 'Norway'

x = getattr(MyObj, 'phone')
print(x)
# +666111000

# Удалим атрибут phone из объекта MyObj:
delattr(MyObj, 'phone')

# Пробуем получить атрибут phone из объекта MyObj:
x = getattr(MyObj, 'phone', '+600000000')
print(x)
# +600000000