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__2つの値が等しいかどうかを検出するために使用されません。

いくつかのオプションがあります。

  1. __eq__同等性をチェックするためにPythonが呼び出すものを定義します。BoundedQueueがリストと等しいとは思わないので、これはお勧めしません。
  2. items()リストを返すメソッドを定義します。次に、リストとの同等性を確認します
  3. リストからBoundedQueueを構築する方法を追加します。次に__eq__、2つのBoundedQueuesが等しいかどうかを確認するために書き込みます。
于 2011-10-21T04:16:29.867 に答える