在基本自定义中,python docs关于比较方法的状态:
[这些方法没有交换题]; 相反,
__lt__()
和__gt__()
是彼此的反射,__le__()
和__ge__()
是彼此的反射,__eq__()
和__ne__()
是他们自己的反射。
我对__lt__()
和__ge__()
的反思会让我感到惊讶(以及__le__()
和__gt__()
)。
虽然文档也说:
…比较操作员之间没有其他隐含关系,例如,
(x<y or x==y)
的真相并不暗示x<=y
如果有的话,什么是或将是选择的反射关系的理由?
,因为 a < b
和 b > a
是等效的, a <= b
和 b >= a
。
反射意味着交换操作数,而不是将"不是"应用于操作员。
__lt__(a,b)
# if we don't know what to do, call
return __gt__(b,a)
您在想以下
__lt__(a,b)
# if we don't know what to do
return not __ge__(a,b)
但这不是反射的意思。