为什么(lt,gt)和(le,ge)反射而不是(lt,ge)和(le,gt)?

时间:2016-11-24 16:11:51

标签: python

Basic customisation中,python docs说明了比较方法:

  

[没有这些方法的交换参数版本];   相反,__lt__()__gt__()是彼此的反映,__le__()__ge__()是彼此的反映,而__eq__()__ne__()是他们自己的反思

__lt__()__ge__()是彼此的反映(以及__le__()__gt__()),我不会感到惊讶。

虽然文档也说明了:

  

......比较运算符之间没有其他隐含的关系,例如(x<y or x==y)的真实性并不意味着x<=y

什么,如果有的话, 或者是选择反思关系的理由?

2 个答案:

答案 0 :(得分:6)

因为a < bb > a相同,因为a <= bb >= a

答案 1 :(得分:2)

反射意味着交换操作数,而不是应用&#34;不是&#34;给运营商。

__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)

但这不是反思的意思。

相关问题