Автор оригинала: 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 () и Делаттр () были описаны. Наконец, мы представили другие методы с помощью которой вы можете видеть/изменить значение атрибута, а также полностью удалить атрибут полностью.
Я надеюсь, что эта статья ответила на все ваши вопросы о том, как получить доступ к атрибуту объекта.