2

dunder メソッドを使用して 2 つのオブジェクトを比較する

2 つの「時間オブジェクト」を比較しようとしましたが、次のエラーが発生しました。

'TypeError: '<' not supported between instances of 'Time' and 'Time'

これは私が試したものです:

  1. 私は最初に「時間クラス」を初期化しました。
class Time:
    def __init__(self, h, m, s):
        self._h = h
        self._m = m
        self._s = s

    # Read-only field accessors
    @property
    def hours(self):
        return self._h

    @property
    def minutes(self):
        return self._m

    @property
    def seconds(self):
        return self._s
  1. 2 つの Time オブジェクトを比較するメソッドを作成しました。
def _cmp(time1, time2):
    if time1._h < time2._h:
        return 1
    if time1._h > time2._h:
        return -1
    if time1._m < time2._m:
        return 1
    if time1._m > time2._m:
        return -1
    if time1._s < time2._s:
        return 1
    if time1._s > time2._s:
        return -1
    else:
        return 0
  1. 私はダンダーメソッドを作成しました。
def __eq__(self, other):
    return True if _cmp(self, other) == 0 else False

def __lt__(self, other):
    return True if _cmp(self, other) == 1 else False

def __le__(self, other):
    return True if _cmp(self, other) == 1 or _cmp(self, other) == 0 else False
  1. いくつかのオブジェクトをインスタンス化し、それらを比較しようとしました (エラーが発生しました)。
t1 = Time(13, 10, 5)
t2 = Time(5, 15, 30)

print(t1 < t2)
print(t2 <= t1)

きっと何かが欠けているに違いない。コーディングに関するすべてのヒントを歓迎します!

4

2 に答える 2