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