RecursionError 最大递归深度超出双端队列的扩展 class

RecursionError maximum recursion depth exceeded with an extended class from deque

我实现了一个扩展 class 如下。

from collections import deque

class IntCollection(deque):
    def is_empty(self):
        return len(self) == 0

    def append(self, x):
        self.append(x)

然后:

a = IntCollection()
a.is_empty() --> True

好的,行得通。但是,当我发出以下命令时,发生了 RecursionError

a.append(1)

RecursionError                            Traceback (most recent call last)
<ipython-input-104-da0a5ad497c3> in <module>
----> 1 a.append(1)

<ipython-input-101-7eac8c051433> in append(self, x)
      6 
      7     def append(self, x):
----> 8         self.append(x)

... last 1 frames repeated, from the frame below ...

<ipython-input-101-7eac8c051433> in append(self, x)
      6 
      7     def append(self, x):
----> 8         self.append(x)

RecursionError: maximum recursion depth exceeded:

我不明白出现此错误的原因。谁能解释一下?顺便说下我用的是Python3.9.4

您正在覆盖双端队列的 append 方法。当您调用它时,它只会递归地再次调用它。 Python 有一个函数可以被递归调用的最大次数,超过之后它会报错(RecursionError)。 将方法的名称更改为其他名称将起作用:

from collections import deque

class IntCollection(deque):
    def is_empty(self):
        return len(self) == 0

    def update(self, x):  # <-- change this name
        self.append(x)
        
a = IntCollection()
# now this work fine
a.update(1)