gpt4 book ai didi

python:无法解释的无限递归与__repr__

转载 作者:太空宇宙 更新时间:2023-11-03 14:24:31 25 4
gpt4 key购买 nike

这里有一段代码,进入了一个无限递归循环,里面只有__repr__函数,貌似在调用自己。但我实在看不出来,它是怎么称呼自己的。而且,我什至不明白,它是怎么称呼的:

class MyList(list): #this is storage for MyDict objects
def __init__(self):
super(MyList, self).__init__()

class MyDict(dict):
def __init__(self, mylist):
self.mylist = mylist #mydict remembers mylist, to which it belongs
def __hash__(self):
return id(self)
def __eq__(self, other):
return self is other
def __repr__(self):
return str(self.mylist.index(self)) #!!!this is the crazy repr, going into recursion
def __str__(self):
return str(self.__repr__())

mylist = MyList()
mydict = MyDict(mylist)
mydict.update({1:2})
print str(mylist.index(mydict)) #here we die :(

执行此代码会导致:

Traceback (most recent call last):
File "test_analogue.py", line 20, in <module>
print str(mylist.index(mydict))
File "test_analogue.py", line 13, in __repr__
return str(self.mylist.index(self))
File "test_analogue.py", line 13, in __repr__
...
... (repetition of last 2 lines for ~666 times)
...
File "test_analogue.py", line 13, in __repr__
return str(self.mylist.index(self))
RuntimeError: maximum recursion depth exceeded while calling a Python object

你明白吗,str(mylist.index(mydict)) 是如何调用 __repr__ 的?我完全不解。谢谢!

最佳答案

>> mylist.index('foo')
ValueError: 'foo' is not in list

您实际上从未将 mydict 添加到 mylist,因此 index 方法会尝试引发此错误。错误包含字典的 repr。当然,dict 的 repr 会尝试在它不在的列表中查找它的 index,这会引发异常,其错误消息是使用 dict 的 repr 计算的,当然,它会尝试在它不在的列表中查找它的 index,并且...

关于python:无法解释的无限递归与__repr__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22638164/

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