Автор оригинала: Rafal Jasionowski.
Вы можете знать следующую проблему: У вас есть имя атрибута объекта в виде строки, вы прочитали его из файла – и вы хотите получить доступ к атрибуту с указанным именем. Но вы не можете использовать синтаксис Объект. “Атрибут” Потому что нотация DOT позволяет только для доступа к имени: объект.attribute. Отказ Как вы решаете эту проблему? Эта статья покажет вам, как!
Быстрое решение: Существует четыре способа доступа к атрибуту объекта в Python через встроенные функции:
getattr ()
– обеспечивает доступ к Атрибут объекта ,Hasattr ()
– проверяет, существует ли атрибут или нет,setattr ()
– используется для установки атрибута, если атрибут не существует, он будет создан,Делаттр ()
– Удаляет атрибут.
Что такое атрибуты в любом случае?
Мы называем атрибут Все содержится внутри объекта в Python. Нет реального различия между простыми данными и функциями – оба являются объектами. Таким образом, все, что вы узнаете об атрибутах, также применяются к методам.
В этой статье я буду использовать следующий класс, чтобы показать, как получить доступ к атрибутам. Он представляет собой оружие какого-то имени и его калибра. Кроме того, это обеспечивает get_entry
Способ, который возвращает строковое представление оружия.
class Gun: def __init__(self, name, caliber): self.name = name self.caliber = caliber
Функция Getattr ()
Как упомянуто выше, getattr ()
Функция позволяет получить доступ к атрибуту класса объекта. Его синтаксис Getattr (объект, атрибут, по умолчанию)
, первые два параметра необходимы, и третий необязательно.
- объект – объект класса, который был создан,
- атрибут – имя атрибута, из которого вы хотите получить значение,
- по умолчанию – Сообщение, которое будет распечатано, если атрибут не существует.
ak47 = Gun(name='Ak-47', caliber='7,62 mm') print(getattr(ak47, 'caliber', f'the attribute named {"caliber"} does not exist')) print(getattr(ak47, 'color', f'the attribute named {"color"} does not exist'))
Выход:
7,62 mm the attribute named color does not exist
Вы сначала создаете Пистолет
класс объекта. Во-вторых, вы получаете его калибр и цвет. Поскольку ваш объект не имеет атрибута, называемого цвет
, вы только получили его калибр и информацию, что Атрибут с именем color не существует Отказ
Вы можете запустить этот код в нашей интерактивной Python Shell:
Упражнение : Измените выход, чтобы также распечатать имя объекта.
Функция hasattr ()
Hasattr ()
Функция проверяет, существует ли атрибут и распечатывает значение BOOL: Правда
Если так или Ложь
Если это не существует. Эта функция имеет только два параметра, которые необходимо указать: объект и атрибут.
attributes = ['name', 'color', 'caliber', 'designer'] for attribute in attributes: print(hasattr(ak47, attribute))
Выход:
True False True False
Как мы можем видеть, Hasattr ()
Функция проверила, назван наш объект AK47
Имеет атрибуты, которые мы включены в Список и вернулся Правда
и Ложь
ценности нам. Эта функция особенно полезна, когда мы написали много строк кода и нашего Проект Огромно, то мы можем быстро и легко проверить, есть ли объект какой-то атрибут или даже несколько атрибутов.
Функция SetAttr ()
setattr ()
Функция устанавливает атрибут. Более того, если атрибут не существует, он будет создан. Есть три параметра, и все требуются:
- объект – объект вашего класса,
- атрибут – имя атрибута, который вы хотите установить,
- ценность – Значение, которое вы хотите дать атрибуту.
ak47 = Gun('ak47', '7,62 mm') print(hasattr(ak47, 'mass')) setattr(ak47, 'mass', '3.47 kg') print(hasattr(ak47, 'mass'))
Выход:
False True
Как видите, функция выполнила свою роль. В начале мы проверили, названа ли атрибутом масса
Существует и в то время еще не существовало ( false
), то мы устанавливаем значение для этого атрибута, и, как мы видим, после использования setattr ()
Объект получил новый атрибут ( True
).
Функция Delattr ()
Делаттр ()
Функция удаляет данный атрибут из определенного объекта. Так же, как с Hasattr ()
параметры два – объект и атрибут.
ak47 = Gun('ak47', '7,62 mm') attributes = ['name', 'caliber'] for attribute in attributes: print(hasattr(ak47, attribute)) for attribute in attributes: delattr(ak47, attribute) print('***') for attribute in attributes: print(hasattr(ak47, attribute))
Выход:
True True *** False False
Сначала мы создали объект класса пистолета и список с именами атрибутов. Позже мы проверили, есть ли объект этих атрибутов ( True
, True
), тогда мы использовали Делаттр ()
В для петли И снова проверил ( false
, false
).
Другие методы доступа к атрибуту объекта:
Наконец, вы также должны предоставить другой способ проверить/изменить значение атрибута или полностью удалить атрибут.
Вы также можете получить доступ к атрибуту с помощью пунктир-синтаксиса:
ak47 = Gun('ak-47', '7,62 mm') print(ak47.caliber) print(ak47.name) ak47.name = 'ak-74' print(ak47.name)
Выход:
7,62 mm ak-47 ak-74
Таким образом, он также работает, но помните, что он может вызвать ошибку, когда заданный атрибут не существует (это не может быть предотвращено так же легко, как со встроенными функциями) и дополнительно мы не можем проверить значение нескольких объектов одновременно использовать петля поэтому мы должны использовать getattr ()
функция.
Вы можете удалить атрибут с помощью функции DEL:
ak47 = Gun('ak47', '7,62 mm') attributes = ['name', 'caliber'] for attribute in attributes: print(hasattr(ak47, attribute)) del ak47.name del ak47.caliber print('***') for attribute in attributes: print(hasattr(ak47, attribute))
Выход:
True True *** False False
Как мы видим, нам удалось удалить, но мы должны вызывать атрибуты один за другим, поэтому, если мы хотим удалить больше атрибутов, лучше использовать Делаттр ()
Функция и для
петля.
Резюме
Мы начали с объяснения того, что являются атрибутами в Python, а затем функции getattr ()
, Hasattr ()
, setattr ()
и Делаттр ()
были описаны. Наконец, мы представили другие методы с помощью которой вы можете видеть/изменить значение атрибута, а также полностью удалить атрибут полностью.
Я надеюсь, что эта статья ответила на все ваши вопросы о том, как получить доступ к атрибуту объекта.