在Python3中,functools.total_ordering装饰器允许我们只重载
__lt__
和__eq__
来获得所有6个比较运算符。我不明白为什么要写两个运算符,如果只写一个的话,即__le__
或者__ge__
,其他的运算符就会相应地被定义。a < b <=> not (b <= a)
a > b <=> not (a <= b)
a == b <=> (a <= b) and (b <= a)
a != b <=> (a <= b) xor (b <= a)
那是因为异或运算符在本地不存在吗?
bool
是int
的子类,False == 0
和True == 1
。因此,True ^ False
等运算可以正常工作。 - mtraceur