Python 在_str__下调用print(self)会抛出递归错误
我定义了一个名为spam的类:Python 在_str__下调用print(self)会抛出递归错误,python,python-3.x,Python,Python 3.x,我定义了一个名为spam的类: class spam(): def __str__(self): print(self) a = spam() print(a) 最后的print语句给出了以下错误: Traceback (most recent call last): File "<pyshell#73>", line 1, in <module> print(a) File "<pyshell#51>",
class spam():
def __str__(self):
print(self)
a = spam()
print(a)
最后的print语句给出了以下错误:
Traceback (most recent call last):
File "<pyshell#73>", line 1, in <module>
print(a)
File "<pyshell#51>", line 3, in __str__
print(self)
File "<pyshell#51>", line 3, in __str__
print(self)
File "<pyshell#51>", line 3, in __str__
print(self)
#same lines repeated several times
RecursionError: maximum recursion depth exceeded
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
印刷品(a)
文件“”,第3行,在__
打印(自我)
文件“”,第3行,在__
打印(自我)
文件“”,第3行,在__
打印(自我)
#同样的台词重复了好几次
递归错误:超过最大递归深度
这是怎么回事?当我在str(self)下说print(self)时会发生什么?什么导致了递归?
print
调用非字符串对象上的str
,以便能够打印它,这将调用您的\uuu str\uu
成员方法
这是您的递归
当您能够将对象转换为“等效”字符串时,您可以定义一个\uuuu str\uu
方法。如果不是,只保留默认值(打印对象类型和地址)
请注意,\uuu str\uu
应该返回一些内容,而不是打印。如果您有一些具有代表性的属性,那么可以使用它返回一些有趣的内容
class spam():
def __init__(self,value):
self.__value = value
def __str__(self):
return "object '{}' with value {}".format(self.__class__.__name__, self.__value)
a = spam(10)
print(a)
印刷品:
object 'spam' with value 10
1)
\uuuu str\uuuu
应该返回什么?2) 这个打印
应该在这里做什么?@ForceBru这个代码不打算做任何事情。我只是想看看会发生什么,很想知道这里发生了什么。