2

私は何が起こっているのかという点で主に興味がありますが、__eq__ が実装されたカスタムクラスがあり、他には何もないとしましょう。

他の比較はどのように解決されますか? デフォルトの動作は何ですか? 比較を実行するたびに、異なる結果が得られます。@total_orderingこれらを実装する必要があること、およびジョブを簡素化するために使用できることも知っています。

舞台裏で実際に何が起こっているのですか?これは主に好奇心によるものです。

4

2 に答える 2

5

が定義されていない場合__lt__、比較では__cmp__代わりに が使用されます。それが定義されていない場合は、デフォルトのコンパレータが使用されます。そして、デフォルトのコンパレータは「オブジェクトID(アドレス)」で比較しているようです。

詳細については、ドキュメントを__cmp__参照してください。

于 2013-03-09T02:19:06.330 に答える
1

Python ドキュメントのこのセクションからの追加情報:

異なる数値型と異なる文字列型を除いて、異なる型のオブジェクトが等しく比較されることはありません。そのようなオブジェクトは一貫して任意に並べ替えられます (異種配列を並べ替えても一貫した結果が得られるようにするため)。

CPython 実装の詳細:数値以外の異なる型のオブジェクトは、型名によって並べ替えられます。適切な比較をサポートしない同じタイプのオブジェクトは、アドレス順に並べられます。

于 2013-03-09T02:23:27.403 に答える