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

Python: Использование Getattr для свойств и методов

Фотография Эмила Перрона на Unsplash с использованием getattr, прежде чем мы перейдем к тому, как Getattr может быть … Tag с Python, программированием.

фото Эмиль Перрон на Неспособный

Используя getattr

Прежде чем мы запрыгнем в то, как Getattr может быть полезным инструментом для сушки нашего кода, давайте рассмотрим, как он работает (документы здесь )! Короче говоря, он требует объекта и строковой версии имени свойства и возвращает значение этого свойства, если он существует на объекте. При желании можно вернуть значение по умолчанию, если атрибут не может быть найден в объекте, и в противном случае вернет атрибут.

Хорошо, давайте посмотрим на пример, используя класс с голой. Учитывая класс человека, как определено ниже:

class Person(object):
    def __init__(self, first_name, last_name):
    self.first_name = first_name
    self.last_name = last_name

    def say_hello(name):
        print "Hello, {}!".format(name)

Хорошо, давайте получим экземпляр человека:

adrienne = Person("Adrienne", "Domingus")

Как только я был создан, мы можем получить доступ к моему Имя ( и last_name ) атрибут с использованием более знакомой точечной нотации, но мы можем также Получите это с помощью getattr , с тем же результатом:

>>> adrienne.first_name
'Adrienne'
>>> getattr(adrienne, 'first_name')
'Adrienne'

Это имеет смысл, потому что атрибуты _name являются… атрибутами. Но теперь для забавной части: знаете ли вы, что методы класса также являются атрибутами? Например:

>>> getattr(adrienne, 'say_hello')
>

Теперь это не очень интересно, это не на самом деле сделать что-либо. Но сила в этом заключается в том, что мы можем сохранить это возвращаемое значение в переменной, а затем назвать его. Вот так:

>>> method = getattr(adrienne, 'say_hello')
>>> method("Someone else")
Hello, Someone else!

Расположение на работу: обобщение вызовов методов

Хорошо, так здорово, что вы можете использовать getattr Чтобы получить методы, а также свойства, но как это нам помогает? Что ж, это определенно может быть полезно при сохранении вашего кода сухой, если у вас есть какая -то общая логика, окружающая вызовы метода ветвления.

Например, если нам нужно сделать вызов API, но какой метод мы используем, зависит от контекста, вместо того, чтобы делать это:

if http_method == 'post':
    requests.post(url, data=data)
elif http_method == 'put':
    requests.put(url, data=data)

Мы можем сделать это:

method = getattr(requests, http_method)
method(url, data=data)

Разница может показаться немного тривиальной в этом примере, но с объектами, которые имеют значительно больше параметров метода, чем в этом примере, начальный метод, полагаясь на операторы IF и ELIF, особенно плохо. getattr на помощь!

Оригинал: “https://dev.to/adriennedomingus/python-using-getattr-for-properties-and-methods-13ca”