1. ホーム
  2. python

[解決済み] Pythonのユーザー定義クラスをソート、ハッシュ可能なものにする

2022-10-15 17:52:51

質問

Pythonでユーザー定義クラスをソート可能、ハッシュ可能にする場合、どのようなメソッドをオーバーライド/実装する必要がありますか?

気をつけるべきことは何ですか?

私が入力する dir({}) と入力すると、組み込みディクショナリに対するメソッドのリストが表示されます。 これらのうち、私はいくつかのサブセットを実装する必要があると仮定します。

['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__']

Python3とPython2では、実装しなければならないメソッドに違いはありますか?

どのように解決するのですか?

私はほとんど他の回答へのコメントとしてこれを投稿しましたが、それは本当にそれ自体で答えになっています。

アイテムをソート可能にするために、彼らはただ実装する必要があります __lt__ . これは内蔵のソートで使用される唯一のメソッドです。

他の比較や functools.total_ordering は、実際にクラスで比較演算子を使いたい場合のみ必要です。

アイテムをハッシュ化するために __hash__ を実装します。を実装する必要があります。 __eq__ を互換性のある方法で実装する必要があります -- 等価なアイテムは同じハッシュを持つべきです。