Автор оригинала: Pankaj Kumar.
Использование функции Python Getattr ()
И снова здравствуйте! В сегодняшней статье мы смотрим на функцию Python Getattr () в Python.
Эта функция пытается получить атрибут объекта Python. Это очень похоже на функцию SetAttr (), но она не модифицирует объект.
Давайте узнаем, как мы можем использовать эту функцию для использования, используя несколько простых примеров.
Основной синтаксис Python Getattr ()
Основной синтаксис функции Getattr () выглядит следующим образом:
value = getattr(object, attribute_name[, default_value])
Здесь мы проезжаем объект
к getattr ()
Отказ Он пытается получить attribute_name
(который должен быть строкой) этого объекта. Если атрибут существует, он даст нам соответствующую ценность
Отказ
Это эквивалентно синтаксису:
value = object.attribute_name
В противном случае есть два случая:
- Если приведено значение по умолчанию (
Default_Value
), он просто будет использовать его и вернуть значение этого значения по умолчанию. - В противном случае это просто поднимет
AttributeError
Исключение, поскольку наш атрибут не найден.
Точка getattr ()
Чтобы не только получить значение атрибута, но и проверять, что он существует!
Давайте теперь посмотрим на несколько примеров, чтобы лучше наше понимание.
Использование Getattr () – некоторые примеры
Сначала сделаем простой пример, где у вас есть ученик, с Имя
и Roll_num
атрибуты. Мы получим их, используя getattr ()
Отказ
class Student(): def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no student = Student('Amit', 8) print(f"Name: {getattr(student, 'name')}") print(f"Roll No: {getattr(student, 'roll_no')}")
Выход
Name: Amit Roll No: 8
Действительно, мы установили правильные атрибуты, и мы возвращаем их с помощью getattr ()
!
Теперь, в этом случае, поскольку оба атрибута были там, не произошло ошибки. Тем не менее, давайте попробуем получить атрибут, который мы не поместили в класс; Например – возраст
Отказ
class Student(): def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no student = Student('Amit', 8) print(f"Name: {getattr(student, 'name')}") print(f"Roll No: {getattr(student, 'roll_no')}") # Will raise 'AttributeError' Exception since the attribute 'age' is not defined for our instance print(f"Age: {getattr(student, 'age')}")
Выход
Name: Amit Roll No: 8 Traceback (most recent call last): File "getattr_example.py", line 12, inprint(f"Age: {getattr(student, 'age')}") AttributeError: 'Student' object has no attribute 'age'
Здесь мы пытались получить атрибут, который не был определен. Поскольку не было никаких вариантов по умолчанию, Python непосредственно поднял исключение.
Если мы хотим установить опцию по умолчанию для '100'
Затем в этом случае, хотя мы пытаемся получить возраст
, так как это не там, это вернется 100
вместо.
Давайте проверим это.
class Student(): def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no student = Student('Amit', 8) print(f"Name: {getattr(student, 'name')}") print(f"Roll No: {getattr(student, 'roll_no')}") # Will not raise AttributeError, since a default value is provided print(f"Age: {getattr(student, 'age', 100)}")
Выход
Name: Amit Roll No: 8 Age: 100
Почему вы должны использовать Getattr ()?
Поскольку мы упоминали ранее, что эта функция эквивалентна object.attribute_name
Какой смысл этой функции?
Хотя приведенное выше оператор с использованием точки точек является TRUE, он действителен только тогда, когда имя атрибута действительно определено во время звонка!
Итак, если ваши классы такие, что структура объекта продолжает время от времени меняться, вы можете использовать getattr ()
Чтобы проверить, находится ли объект в каком-то конкретном состоянии!
Это также дает нам очень хороший способ легко справиться с исключениями, а также предоставлять затруднительные значения по умолчанию. В случае, если что-то пошло не так, мы могли бы либо поймать AttributeError
Исключение или проверьте значение по умолчанию.
Надеюсь, что делает его немного более понятнее относительно того, почему это может быть полезно для вас!
Заключение
Мы узнали о том, как мы могли бы использовать getattr ()
Функция для получения атрибутов объекта во время выполнения.
Рекомендации
- Официальная документация Python на Getattr ()
- Журналдав Статья на Python Getattr ()