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

时间:2017-05-22 05:14:10

标签: python inheritance collections

因此,每当超出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)

0 个答案:

没有答案