2016-11-24 73 views
4

Basic customisation,約比較方法的python文檔狀態:爲什麼(lt,gt)和(le,ge)反射而不是(lt,ge)和(le,gt)?

[這些方法沒有交換參數版本]; 寧可,__lt__()__gt__()是彼此的反映,__le__()__ge__()是彼此的反映,而__eq__()__ne__()是他們自己的反映。

我會通過__lt__()__ge__()是彼此的反射(以及__le__()__gt__())少驚訝。

雖然文檔也狀態:

...比較運營商之間沒有其他的隱含關係,例如,(x<y or x==y)真相併不意味着x<=y

,如果有的話,是或將是選擇反射關係的基本原理?

+0

相關:'@ functools.total_ordering',[__le__,__ge__?(http://stackoverflow.com/q/13799386/3789665)的Python錯誤。 – greybeard

回答

4

因爲a < bb > a是等效的,因爲a <= bb >= a

+2

我似乎誤讀_reflection_(邏輯)_complement_。 – greybeard

1

反射意味着交換操作數,不向操作員應用「不」。

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

但是,這並不是意味着什麼反映。

相關問題