Что такое getattr () и как мне его использовать? - PullRequest
242 голосов
/ 02 ноября 2010

Я читал о функции getattr() . Проблема в том, что я до сих пор не могу понять идею его использования. Единственное, что я понимаю о getattr(), это то, что getattr(li, "pop") - это то же самое, что и li.pop.

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

Ответы [ 12 ]

2 голосов
/ 26 марта 2015
# getattr

class hithere():

    def french(self):
        print 'bonjour'

    def english(self):
        print 'hello'

    def german(self):
        print 'hallo'

    def czech(self):
        print 'ahoj'

    def noidea(self):
        print 'unknown language'


def dispatch(language):
    try:
        getattr(hithere(),language)()
    except:
        getattr(hithere(),'noidea')()
        # note, do better error handling than this

dispatch('french')
dispatch('english')
dispatch('german')
dispatch('czech')
dispatch('spanish')
0 голосов
/ 09 января 2019

Это также уточняет от https://www.programiz.com/python-programming/methods/built-in/getattr

class Person:
    age = 23
    name = "Adam"

person = Person()
print('The age is:', getattr(person, "age"))
print('The age is:', person.age)

Возраст: 23

Возраст: 23

class Person:
    age = 23
    name = "Adam"

person = Person()

# when default value is provided
print('The sex is:', getattr(person, 'sex', 'Male'))

# when no default value is provided
print('The sex is:', getattr(person, 'sex'))

Полis: Male

AttributeError: у объекта «Person» нет атрибута «sex»

...