gpt4 book ai didi

python - 在python中递归调用实例方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:19 25 4
gpt4 key购买 nike

我正在尝试调用字典中对象的实例方法,这些对象本身具有对象,它们都来自同一个类。但是我有一个无限递归,我认为“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 递归?怎么办?感谢您的帮助,请原谅我的英语不好。

最佳答案

您已将 name 和 foo_objects 定义为类变量,而不是实例变量——即它们当前在 Foo 类的所有实例之间共享。

改变:

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

到:

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

它们将成为实例变量,正如我怀疑的那样。

关于python - 在python中递归调用实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15728984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com