Рубрики
Без рубрики

Как получить доступ к атрибуту объекта, учитывая имя атрибута как строку?

Вы можете знать следующую проблему: у вас есть имя атрибута объекта в виде строки – – говорят, вы прочитали его из файла — и вы хотите получить доступ к атрибуту с указанным именем. Но вы не можете использовать объект Syntax. «Атрибут», потому что запись DOT позволяет только для доступа к имени: Object.Attribute. Как вы решаете эту проблему? … Как получить доступ к атрибуту объекта, учитывая имя атрибута как строку? Читать далее “

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

Я надеюсь, что эта статья ответила на все ваши вопросы о том, как получить доступ к атрибуту объекта.