2

在我的代码中,我定义了一个具有自己的 repr 方法的类。类的表示应该是一个列表。

def __repr__(self):
    if self.front <= self.tail:
        q = self._queue[self.front:self.tail+1]

    elif self.front > self.tail:
        q = self._queue[self.front:]
        q.extend(self._queue[:self.tail + 1])

    return (q.__repr__())

我编写了以下单元测试来测试此方法。

def test_enqueue(self):
    q = BoundedQueue(1)
    q.enqueue(1)
    self.assertEqual(q, [1])

但是,我最终遇到了一个断言错误:

Traceback (most recent call last):
  File "test_internmatch_queue.py", line 13, in test_enqueue
    self.assertEqual(q, [1])
AssertionError: [1] != [1]

我不确定问题是什么……在我看来,[1]==[1]!我在我的 repr 方法(如下)中尝试了其他几种变体,它们也都返回了错误。

return repr(q)
return str(q)
4

2 回答 2

4

q是一个BoundedQueue[1]是一个list。除非您覆盖,否则它们不能相等__eq__repr不用于相等性测试。

于 2011-10-21T04:00:29.500 回答
1

作为递归状态,__repr__不用于检测两个值是否相等。

你有几个选择:

  1. 定义__eq__哪个是 python 调用来检查相等性。我不推荐这样做,因为我真的不认为 BoundedQueue 等于列表
  2. 定义一个items()返回列表的方法。然后检查列表是否相等
  3. 添加一种从列表构建 BoundedQueue 的方法。然后写入__eq__检查两个 BoundedQueue 之间的相等性。
于 2011-10-21T04:16:29.867 回答