使用dunder方法对两个对象进行比较
我试图比较两个“时间对象”,但我得到了以下错误:
'TypeError: '<' not supported between instances of 'Time' and 'Time'
这就是我试过的:
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._sdef _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 0def __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 Falset1 = Time(13, 10, 5)
t2 = Time(5, 15, 30)
print(t1 < t2)
print(t2 <= t1)我一定是遗漏了什么。欢迎所有关于编码的提示!
发布于 2021-07-01 09:50:11
有许多方法(或魔术-方法),如果您想使用<和<=,那么您希望使用__lt__表示<,__le__表示<= (表示小于和小于等于)。
class A:
def __init__(self, n):
self.n = n
def __le__(self, other):
return self.n <= other.n
a = A(5)
b = A(10)
print(a <= b)将返回True,因为5小于或等于10。
发布于 2021-07-01 10:03:43
正如Matthias和Jonathan所建议的,我忘记了缩进以下代码,并将其放置在我的Time类之外:
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 Falsehttps://stackoverflow.com/questions/68207928
复制相似问题