Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在_str__下调用print(self)会抛出递归错误_Python_Python 3.x - Fatal编程技术网

Python 在_str__下调用print(self)会抛出递归错误

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>",

我定义了一个名为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>", 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这个代码不打算做任何事情。我只是想看看会发生什么,很想知道这里发生了什么。