首页 > 解决方案 > 在 __str__ 下调用 print(self) 会引发 RecursionError

问题描述

我定义了一个名为 spam 的类:

class spam():
    def __str__(self):
        print(self)
a = spam()

print(a)

最后的打印语句给了我以下错误:

    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

这里发生了什么?当我在 str(self) 下说 print(self) 时会发生什么?是什么导致了递归?

标签: pythonpython-3.x

解决方案


print调用str非字符串对象以便能够打印它,这会调用您的__str__成员方法。

这是你的递归。

__str__当您能够将对象转换为“等效”字符串时,您就定义了一个方法。如果没有,请保留默认值(打印对象类型和地址)

请注意,__str__应该返回一些东西,而不是打印。如果你有一些代表性的属性,你可以用它来返回一些有趣的东西。

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

推荐阅读