因此,每当超出maxlen时,我都会为了引发MemoryError异常而继承deque(maxlen是deque的默认kwarg)。我写了以下课程:
from collections import deque
class MessageDeque(deque):
def append(self, item):
dropped_message = self.popleft() if len(self) == self.maxlen else None
super(MessageDeque, self).append(item)
if dropped_message:
raise MemoryError(dropped_message)
现在,当我将项目附加到此列表时,无论maxlen设置为什么,我都会得到AttributeError: "MessageDeque" object has no attribute "maxlen"
打印deque会给我deque([], maxlen=10)
这是预期的,但使用dir
会显示确实没有maxlen
属性。
在课程中添加以下内容后,所有内容似乎都按预期工作,但我认为代码完全没必要
def __init__(self, *args, **kwargs):
self.maxlen = kwargs.get('maxlen')
super(MessageDeque, self).__init__(*args, **kwargs)