class SavingsAccount(object):
def __init__(self, name, pin, balance = 0.0):
self._name = name
self._pin = pin
self._balance = balance
def __lt__(self,other):
print("this is <")
return self._name < other._name
s1 = SavingsAccount("Ken","1000",0)
s2 = SavingsAccount("Bill", "1001",30)
s1<s2
this is <
False
s1>s2
this is <
True
当s1<s2时调用__lt__方法没有问题,问题是当调用>时貌似也调用了__lt__,但是结果貌似取了一个非操作。这是python 的什么特性?什么情况下会出现这种结果
参考PEP207:
python3 假定
<
和>
是相反的操作, 如果其中一个没有定义, 使用另一个的时候就调用定义的一个, 只是把对比的对象交换一下位置. 同样的特性还发生在<=
和>=
以及==
和!=
.