collections.deque 断言失败

问题描述 投票:0回答:1

我不明白为什么下面的代码会出现断言错误。在我看来, 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'])
python assertion deque
1个回答
0
投票

可以按如下方式覆盖

__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

© www.soinside.com 2019 - 2024. All rights reserved.