为什么子类化deque时需要显式定义属性?

2024-09-30 10:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我将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)

Tags: selfmessageifinitdefargsitemkwargs

热门问题