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