Изучите Python Трудный путь: Упражнение 43 Создание функций

while True:
    print "\n--------"
    room = getattr(self, next)
    next = room()

Мой вопрос связан с приведенным выше блоком кода, который можно найти в разделе "Изучение Python: трудный путь - упражнение 43". Я понимаю, что третья строка хранит getattr() результаты функции (в этом случае, self.next) в room переменная (если я не прав там...?)

То, что вешает меня прямо сейчас, это четвертая строка, где функция room() хранится в переменной next, Принципиально я не понимаю room() часть, поскольку это не определенная функция в блоке кода. Позволяет ли Python пользователю определять функцию на основе предыдущей переменной? (Например: написание room() впервые создает функцию под названием room() на основе того, что хранится в переменной room).

Любая помощь будет принята с благодарностью!

1 ответ

room = getattr(self, next)

Возвращает функцию, которая затем вызывается.

next = room()

Функции в Python являются объектами первого класса, поэтому их можно передавать как таковые. Handy!

Учтите следующее:

>>> class foo:
      def bar(self):
        print 'baz!'
      def __init__(self):
        # Following lines do the same thing!
        getattr(self, 'bar')()
        self.bar() 
>>> foo()
baz!
baz!
<__main__.foo instance at 0x02ADD8C8>
Другие вопросы по тегам