Позволяет получить значение атрибута объекта по его имени.
Синтаксис:
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