因此,我将deque子类化是为了在超出maxlen时引发MemoryError异常(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)
目前没有回答
相关问题 更多 >
编程相关推荐