1

オブジェクト自体を持つ辞書内のオブジェクトのインスタンスメソッドを呼び出そうとしていますが、すべて同じクラスのものです。しかし、私は無限再帰を持っています。「自己」は変わらず、最初のオブジェクトを常に参照していると思います。

class Foo():
    name = 'name'
    foo_objects = {}
    def print_name(self):
        output = self.name
        for key, value in self.foo_objects.items():
            output += value.print_name()
        return output

私はこのように使用しています:

def main():
    foo = Foo()
    foo.foo_objects['key'] = Foo()
    print foo.print_name()

if __name__ == '__main__':
    sys.exit(main())

そして、私はこのエラーを受け取ります:

  ...etc...
    output += value.print_name()
  File "C:\dev\python\projects\test\test.py", line 41, in print_name
    output += value.print_name()
  File "C:\dev\python\projects\test\test.py", line 41, in print_name
    output += value.print_name()
RuntimeError: maximum recursion depth exceeded

どうしたの?Python再帰について理解していないことは何ですか? どのようにすることができますか?助けてくれてありがとう、そして私の悪い英語を許してください。

4

1 に答える 1

4

name と foo_objects をインスタンス変数ではなく、クラス変数として定義しました。つまり、これらは現在、Foo クラスのすべてのインスタンス間で共有されています。

変化する:

class Foo():
  name = 'name'
  foo_objects = {}
...

に:

class Foo():
  def __init__(self):
    self.name = 'name'
    self.foo_objects = {}
...

そして、あなたが望んでいたと思うように、それらはインスタンス変数になります。

于 2013-03-31T11:51:21.710 に答える