Python как проверить наличие атрибута у объекта
Перейти к содержимому

Python как проверить наличие атрибута у объекта

  • автор:

Метод hasattr() в Python

В мире объектно-ориентированного программирования мы имеем дело с представлением или отображением реальных сценариев в классы и объекты. Объекты можно рассматривать как план класса, который отображает атрибуты и его поведение.

Иногда мы можем столкнуться с ситуациями, когда нам нужно проверить наличие атрибута, занятого или содержащегося в классе. То же самое можно сделать с помощью метода Python hasattr(). Это помогает в проверке наличия атрибута в классе.

Python Hasattr() метод

Класс Python представляет атрибуты и их поведение через объект.

Метод hasattr() method используется для проверки наличия атрибута в классе.

Метод hasattr() возвращает логическое значение, т.е. True или False, в зависимости от наличия атрибута в классе.

В приведенном выше примере атрибут lang содержится в классе Info. Таким образом, функция hasattr() возвращает True.

Как видно из приведенного выше примера, функция возвращает значение False, поскольку атрибут date не определен в классе.

Сравнение

В Python 2 hasattr() подавляет все исключения и возвращает False для условия.

Например, если данный атрибут ‘A’ содержится в классе, но озабочен некоторыми исключениями. В этот момент hasattr() проигнорирует все исключения и вернет False, даже если атрибут «A» существует в классе.

С другой стороны, в Python 3 hasattr() вызывает исключение, если атрибут связан с некоторыми исключительными критериями.

Пример: Python 2 с функцией hasattr()

В приведенном выше коде, несмотря на синтаксическую ошибку из-за декоратора, метод hasattr() не вызывает никаких ошибок, игнорирует исключение и возвращает False, даже если класс содержит этот конкретный атрибут.

Пример: Python 3 с функцией hasattr()

В приведенном ниже коде функция hasattr() вызывает ошибку исключения по причине синтаксической ошибки с атрибутом ‘hey’.

Как узнать, есть ли у объекта атрибут в Python

Есть ли способ в Python определить, имеет ли объект какой-то атрибут? Например:

Как вы можете определить, есть ли a атрибут property перед его использованием?

9 ответов

EDIT: см. ответ zweiterlinde ниже, который предлагает хороший совет просить прощения! Очень питонический подход!

Общая практика в python заключается в том, что если свойство, скорее всего, будет там в большинстве случаев, просто вызовите его и пусть оно распространяется, или ловушка его с помощью блока try/except. Вероятно, это будет быстрее, чем hasattr . Если свойство скорее всего не будет присутствовать в большинстве случаев, или вы не уверены, использование hasattr , вероятно, будет быстрее, чем повторное попадание в блок исключений.

Как Джаррет Харди ответил, hasattr сделает трюк. Я хотел бы добавить, однако, что многие в сообществе Python рекомендуют стратегию «проще просить прощения, чем разрешение» (EAFP), а не «смотреть, прежде чем прыгать» (LBYL). См. Следующие ссылки:

Вы можете использовать hasattr() или catch AttributeError , но если вы действительно хотите, чтобы значение атрибута имело значение по умолчанию, если оно не существует, лучшим вариантом является просто использовать getattr() :

Я думаю, что вы ищете hasattr. Тем не менее, я бы рекомендовал что-то подобное, если вы хотите обнаружить свойства python

Недостатком здесь является то, что ошибки атрибутов в коде свойств __get__ также попадают.

В противном случае do —

Согласно pydoc, hasattr (obj, prop) просто вызывает getattr (obj, prop) и исключает исключения. Таким образом, так же справедливо обернуть доступ к атрибуту с помощью инструкции try и уловить AttributeError, поскольку он должен заранее использовать hasattr().

В зависимости от ситуации вы можете проверить с помощью isinstance , какой у вас объект, а затем использовать соответствующие атрибуты. С введением абстрактных базовых классов в Python 2.6/3.0 этот подход также стал намного более мощным (в основном ABC позволяют использовать более сложный способ утка).

Одна из ситуаций была бы полезной, если бы два разных объекта имели атрибут с тем же именем, но с другим значением. Использование только hasattr может привести к появлению странных ошибок.

Хорошим примером является различие между итераторами и итерами (см. этот вопрос). Методы __iter__ в итераторе и итерабеле имеют одно и то же имя, но семантически совершенно разные! Таким образом, hasattr бесполезен, но isinstance вместе с ABC обеспечивает чистое решение.

Однако я согласен, что в большинстве ситуаций подход hasattr (описанный в других ответах) является наиболее подходящим решением.

Как проверить, имеет ли объектный объект Python определенный атрибут?

Python – Проверьте, есть ли объект определенным атрибутом

Чтобы проверить, имеет ли указанный объект Python, имеет определенный атрибут, вызовите HASATTR () встроенные функции и пропустить объект и имя атрибута на функцию HASATTR (). Если объект имеет указанный атрибут, то функция HASATTR () возвращает TRUE, еще возвращает false.

Следующее утверждение программы является приведенным примером для вызова функции HASATTR () для проверки, если учесть Python Object объект имеет определенный атрибут Attrname Отказ

Hasattr () Возвращает логическое значение истинного или ложного.

Пример 1: Проверьте, имеет ли объектный объект Python

В этом примере мы возьмем объект A1 С атрибутами х и y Отказ Затем мы будем использовать функцию hasattr () для проверки, если A1 имеет атрибут х и z Отказ

Резюме

В этом руководстве примеров Python мы узнали, как проверить, имеет ли указанный объект Python, имеет определенный атрибут, используя функцию hasattr ().

Функция hasattr() в Python

Функция hasattr() в Python используется для проверки того, имеет ли указанный объект данный атрибут или нет. Эта функция возвращает логическое значение.

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

Внутренне эта функция вызывает getattr (object, name) и возвращает True. Если при вызове функции getattr() возникла ошибка AttributeError, возвращается значение False. В противном случае возвращается True.

Пример

Давайте посмотрим на пример функции hasattr().

Сравнение hasattr() и in

Преимущества функции hasattr() видны, когда значение атрибута определяется динамически, например, при получении его из пользовательского ввода. Мы не можем сделать то же самое с x in object из-за динамической природы.

Давайте посмотрим на другой пример, где мы попросим пользователя ввести значение атрибута, а затем использовать hasattr(), чтобы проверить, существует он или нет, и действовать соответствующим образом.

Резюме

Python hasattr() – это служебная функция, которая проверяет, присутствует ли атрибут для объекта, прежде чем мы попытаемся использовать его в нашей программе.

Мы можем легко реализовать эту функцию или использовать команду try-expect, но использование этой функции рекомендуется, чтобы иметь чистый код.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *