2013-03-31 2 views
1

Я пытаюсь вызвать метод экземпляра объектов внутри словаря, у которого есть сами объекты, все из одного класса. Но у меня бесконечная рекурсия, я думаю, что «я» не меняется и ссылается на первый объект все время.Метод вызова метода рекурсивно в python

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

Вы определили имя и foo_objects как переменные класса, а не переменные экземпляра - то есть они в настоящее время разделены между всеми экземплярами класса Foo.

Изменение:

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

к:

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

и они станут переменными экземпляра, как я подозреваю, что вы хотели, чтобы они.

+0

Спасибо, теперь я знаю об атрибутах класса и атрибутах экземпляра в python. – ecdani

Смежные вопросы