Python 实例没有属性-Deque库
我正在尝试使用deque库中的方法(来自集合)。但是我得到了错误“MyQueue实例没有属性'append'”。但我确信deque有一个“append”方法。是什么导致了这个错误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) 您可以通
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
实例,然后提供您想要的任何方法接口。我将补充这一点作为单独的回答。