__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 __ と同じくらい簡単に比較を実装できる代替手段はありますか?

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method