__cmp__の代わりに__lt__

| | | | | | |

Python 2.xには、比較演算子をオーバーロードする2つの方法があります。 __ cmp __ または __ lt __ 豊富な比較オーバーロードが好ましいと言われていますが、なぜそうなのですか?

豊富な比較演算子はそれぞれを実装する方が簡単ですが、ほぼ同じロジックでそれらのいくつかを実装する必要があります。ただし、組み込みの cmp とタプルの順序を使用できる場合、 __ cmp __ は非常に単純になり、すべての比較が実行されます。

  class A (オブジェクト):def __init __(self、name、age、other):self.name = name self.age = age self.other = other def __cmp __(self、other):assert isinstance(other、A)#これに対する仮定例returncmp((self.name、self.age、self.other)、(other.name、other.age、other.other)) 

この単純さは私のニーズを満たしているようです豊富な比較の6つすべてをオーバーロードするよりもはるかに優れています。 (ただし、「スワップされた引数」/反映された動作に依存する場合は、「ちょうど」4に下げることができますが、私の謙虚な意見では、それは複雑さの正味の増加につながります。)

< strong> __ cmp __ のみをオーバーロードする場合に注意する必要のある予期しない落とし穴はありますか?

&lt;を理解しています、&lt; = == などの演算子は、他の目的でオーバーロードでき、好きなオブジェクトを返すことができます。私はそのアプローチのメリットについて質問しているのではなく、数値を意味するのと同じ意味でこれらの演算子を比較に使用した場合の違いについてのみ質問しています。

更新:クリストファーとして指摘 cmpが消えています3.xで。 上記の__cmp __ と同じくらい簡単に比較を実装できる代替手段はありますか?