Python 属性';马克斯伦';属于';收藏。deque';对象不可写

Python 属性';马克斯伦';属于';收藏。deque';对象不可写,python,python-3.x,collections,deque,Python,Python 3.x,Collections,Deque,有人可以解释一下,并告诉我如何在Python3.4中实现这一点吗 我总是很紧张 class TailDeque(collections.deque): '''Implementation of deque with limited maxlen support for Python 2.5.''' def __init__(self, iterable=None, maxlen=-1): super(TailDeque, self).__init__([])

有人可以解释一下,并告诉我如何在Python3.4中实现这一点吗

我总是很紧张

class TailDeque(collections.deque):
    '''Implementation of deque with limited maxlen support for Python 2.5.'''
    def __init__(self, iterable=None, maxlen=-1):
        super(TailDeque, self).__init__([])
        self.maxlen = maxlen
        if iterable is not None:
            self.extend(iterable)

    def extend(self, iterable):
        for item in iterable:
            self.append(item)

    def extendleft(self, iterable):
        for item in iterable:
            self.appendleft(item)

    def appendleft(self, item):
        if len(self) == self.maxlen:
            self.pop()
        super(TailDeque, self).appendleft(item)    

    def append(self, item):
        if len(self) == self.maxlen:
            self.popleft()
        super(TailDeque, self).append(item)
logQueue = TailDeque(maxlen=20)

maxlen参数在2.6和3.0版本中添加到collections.deque。(从参数设置的只读
maxlen
属性已添加到2.7和3.1中。)您发布的代码旨在作为2.5的部分替代。对于2.6+和3.1+版本,您应该只使用collections.deque,而不用担心部分后端口。如果您正在编写支持2.5到2.7的代码,那么在2.5上运行时,应该用其包装器替换collections.deque。差不多

AttributeError: attribute 'maxlen' of 'collections.deque' objects is not writable

为什么在Python3.4中需要这样做?您正在使用的代码是Python2.5和2.6的后端口,对于更高版本来说是不必要的。我使用Python3.4,它会抛出我的AttributeError:collections.deque对象的属性“maxlen”不可写这很清楚,但不是我要求的。
import sys

major = sys.version[0:3]

if major >= '2.6':
    from collections import deque
elif major == '2.5':
    from myutils import TailDeque as deque
else:
    raise MyException('This app requires 2.5 or later.')