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

私の質問は、 Learn Python The Hard Way - Exercise 43にある上記のコード ブロックから生じています。getattr()3 行目で関数の結果 (この場合はself.next) が変数に格納されていることは理解していroomます (間違っていなければ...?)。

今私を悩ませているのは、関数room()が variable に格納されている 4 行目ですnextroom()基本的に、これはコードブロックで定義された関数ではないため、その部分がわかりません。Python では、ユーザーは前の変数に基づいて関数を定義できますか? room()(例:初めて書き込むとroom()、変数に格納されている内容に基づいて呼び出される関数が作成されますroom)。

どんな助けでも大歓迎です!

4

1 に答える 1

5
room = getattr(self, next)

呼び出し可能なfunctionを返します。

next = room()

関数は Python のファースト クラス オブジェクトであるため、そのまま渡すことができます。ハンディ!

次の点を考慮してください。

>>> 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>
于 2012-12-08T00:29:03.540 に答える