我不明白为什么下面的代码会出现断言错误。在我看来, print 语句的输出应该等于
queue_challenge()
的返回值,但事实并非如此。有人可以解释一下原因以及正确的断言应该是什么吗?
from collections import deque
class Queue:
def __init__(self):
self.items = deque()
def is_empty(self):
return not self.items
# return len(self.items) == 0
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
return self.items.popleft()
def size(self):
return len(self.items)
def peek(self):
return self.items[0]
def __str__(self):
return str(self.items)
def queue_challenge():
q = Queue()
q.enqueue("Learning")
q.enqueue("is")
q.dequeue()
q.enqueue("great")
q.enqueue("fun")
q.dequeue()
return q
print(queue_challenge()) # deque(['great', 'fun'])
assert queue_challenge() == deque(['great', 'fun'])
可以按如下方式覆盖
__eq__
,以测试您可能正在寻找的相等类型:
class Queue:
# omitting the other methods of the class for succinctness
...
def __eq__(self, other) -> bool:
items = (
other.items
if issubclass(self.__class__, other.__class__)
else other
)
return self.items == items
print(queue_challenge() == deque(['great', 'fun']))
True