我遇到了一些令人困惑的魔法比較方法。 假設我們有下面的類:Python魔法混淆
class MutNum(object):
def __init__ (self, val):
self.val = val
def setVal(self, newval):
self.val = newval
def __str__(self):
return str(self.val)
def __repr__(self):
return str(self.val)
# methods for comparison with a regular int or float:
def __eq__(self, other):
return self.val == other
def __gt__(self, other):
return self.val > other
def __lt__(self, other):
return self.val < other
def __ge__(self, other):
return self.__gt__(other) or self.__eq__(other)
def __le__(self, other):
return self.__lt__(other) or self.__eq__(other)
類做的事情是應該做的,一個MutNum對象比較正規的整數或浮點數是沒有問題的。然而,這是我不明白的地方,當魔法方法被給予兩個MutNum對象時,它甚至會比較好。
a = MutNum(42)
b = MutNum(3)
print(a > b) # True
print(a >= b) # True
print(a < b) # False
print(a <= b) # False
print(a == b) # False
爲什麼這樣嗎?謝謝。
例如,可能會認爲'__gt__'和'__lt__'與'__add__'和'__radd__'存在相同的關係。如果第一個不適用,Python會嘗試使用顛倒的操作數的另一個。 – chepner