1

我试图在字典中调用对象的实例方法,这些对象本身都来自同一个类。但是我有一个无限递归,我认为'self'不会改变并一直引用第一个对象。

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 回答