实例没有属性 - Deque Library

Instance has no attribute - Deque Library

我正在尝试使用双端队列库(来自集合)中的方法。但是我收到错误 "MyQueue instance has no attribute 'append'"。但我确定 deque 有一个 "append" 方法。是什么导致了这个错误?

import copy
from collections import deque

class MyQueue:
    def __init__(self):
        self = deque()
    def push(self, val):
        self.append(val)

你可以通过继承 deque:

from collections import deque


class MyQueue(deque):
    def push(self, val):
        self.append(val)

然后可以这样使用:

>>> q = MyQueue()
>>> q.push(5)
>>> q
deque([5])

有关 类 和 Python 中的继承的详细信息,请参阅 Python tutorial

您也可以通过使用 MyQueue:

包装一个 deque 实例来实现
from collections import deque


class MyQueue(object):
    def __init__(self, *args, **kwargs):
        self._queue = deque(*args, **kwargs)

    def push(self, value):
        self._queue.append(value)

    def pop(self):
        return self._queue.pop()

如果您想在内部使用 deque 但有兴趣提供比 deque 已经提供的界面更简单的界面,这将是一个很好的方法。