Python 实例没有属性-Deque库

Python 实例没有属性-Deque库,python,class,collections,attributes,queue,Python,Class,Collections,Attributes,Queue,我正在尝试使用deque库中的方法(来自集合)。但是我得到了错误“MyQueue实例没有属性'append'”。但我确信deque有一个“append”方法。是什么导致了这个错误 import copy from collections import deque class MyQueue: def __init__(self): self = deque() def push(self, val): self.append(val) 您可以通

我正在尝试使用deque库中的方法(来自集合)。但是我得到了错误“MyQueue实例没有属性'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)
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()
然后可以这样使用:

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

有关Python中类和继承的更多信息,请参阅。

您也可以通过使用
MyQueue
包装
deque
实例来完成此操作:

from collections import deque


class MyQueue(deque):
    def push(self, val):
        self.append(val)
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
已经提供的界面更简单的界面,那么这将是一个很好的方法。

谢谢。有没有办法在不改变MyQueue规范的情况下实现这一点?@Essam我不确定我是否完全理解你的意思。你能更具体一点你想做什么吗?我想保持“类MyQueue()”的原样。在init或push的定义中有什么我可以更改的吗?或者子类化MyQueue是唯一的方法吗?@Essam您可以包装一个
deque
实例,然后提供您想要的任何方法接口。我将补充这一点作为单独的回答。