2013-03-31 30 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 

What's錯了嗎?我不懂Python的遞歸?怎麼辦? 感謝您的幫助,請原諒我英語不好。

回答

4

您已將name和foo_objects定義爲類變量,而不是實例變量 - 即它們當前在Foo類的所有實例之間共享。

變化:

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

到:

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

,他們將成爲實例變量,因爲我懷疑你想要他們。

+0

Thanks !!,現在我知道python中的類屬性和實例屬性。 – ecdani