私は何が起こっているのかという点で主に興味がありますが、__eq__ が実装されたカスタムクラスがあり、他には何もないとしましょう。
他の比較はどのように解決されますか? デフォルトの動作は何ですか? 比較を実行するたびに、異なる結果が得られます。@total_ordering
これらを実装する必要があること、およびジョブを簡素化するために使用できることも知っています。
舞台裏で実際に何が起こっているのですか?これは主に好奇心によるものです。
私は何が起こっているのかという点で主に興味がありますが、__eq__ が実装されたカスタムクラスがあり、他には何もないとしましょう。
他の比較はどのように解決されますか? デフォルトの動作は何ですか? 比較を実行するたびに、異なる結果が得られます。@total_ordering
これらを実装する必要があること、およびジョブを簡素化するために使用できることも知っています。
舞台裏で実際に何が起こっているのですか?これは主に好奇心によるものです。
が定義されていない場合__lt__
、比較では__cmp__
代わりに が使用されます。それが定義されていない場合は、デフォルトのコンパレータが使用されます。そして、デフォルトのコンパレータは「オブジェクトID(アドレス)」で比較しているようです。
詳細については、ドキュメントを__cmp__
参照してください。
Python ドキュメントのこのセクションからの追加情報:
異なる数値型と異なる文字列型を除いて、異なる型のオブジェクトが等しく比較されることはありません。そのようなオブジェクトは一貫して任意に並べ替えられます (異種配列を並べ替えても一貫した結果が得られるようにするため)。
CPython 実装の詳細:数値以外の異なる型のオブジェクトは、型名によって並べ替えられます。適切な比較をサポートしない同じタイプのオブジェクトは、アドレス順に並べられます。