__lt__ 而不是 __cmp__

| | | | | | |

Python 2.x 有兩種重載比較運算符的方法,__cmp__ 或“豐富的比較運算符”,例如 __lt__據說富比較重載是首選,但為什麼會這樣?

富比較運算符每個都更容易實現,但您必須以幾乎相同的邏輯實現其中幾個.但是,如果您可以使用內置的 cmp 和元組排序,那麼 __cmp__ 會變得非常簡單並滿足所有比較:

class A (object): def __init__(self, name, age, other): self.name = name self.age = age self.other = other def __cmp__(self, other): assert isinstance(other, A) # 假設例子 return cmp((self.name, self.age, self.other), (other.name, other.age, other.other)) 

這種簡潔好像滿足了我的需求比重載所有 6(!)的豐富比較要好得多。 (但是,如果您依賴“交換的論點”/反映的行為,您可以將其降至“僅”4,但在我看來,這會導致並發症的淨增加。)

< strong>如果我只重載 __cmp__ 是否有任何不可預見的陷阱需要注意?

我了解 < , <=, == 等運算符可以被重載用於其他目的,並且可以返回任何他們喜歡的對象。我不是在問這種方法的優點,而只是在使用這些運算符進行比較時的差異,就像它們對數字的意義一樣。

更新: As Christopher 指出cmp正在消失在 3.x 中。 是否有任何替代方法可以像上面的 __cmp__ 一樣簡單地實現比較?