在我的代码中,我使用自己的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)
答案 0 :(得分:4)
q
是BoundedQueue
。 [1]
是list
。除非您覆盖__eq__
,否则它们不能相等。 repr
不用于等式测试。
答案 1 :(得分:1)
作为递归状态,__repr__
不用于检测两个值是否相等。
您有几种选择:
__eq__
这是python调用以检查相等性的内容。我不推荐这个,因为我没有真正看到BoundedQueue等于列表items()
方法。然后检查列表中的相等性__eq__
以检查两个BoundedQueues之间的相等性。