Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Python3.x】__class__::__hash__()メソッドの使い方

__hash__メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

__hash__メソッドは、特定のオブジェクトのハッシュ値を計算し、整数として返すメソッドです。ハッシュ値とは、オブジェクトを識別し、辞書(dict)のキーや集合(set)の要素として使用する際に、高速なデータ検索や比較を可能にするために利用される数値です。

このメソッドを持つオブジェクトは「ハッシュ可能(hashable)」と呼ばれます。ハッシュ可能であるためには、いくつかの重要な条件を満たす必要があります。まず、オブジェクトのライフタイムを通じてハッシュ値が変化してはなりません。また、Pythonの__eq__メソッドによって等しいと判断される二つのオブジェクトは、必ず同じハッシュ値を返さなければなりません。一般的に、ハッシュ可能なオブジェクトは不変(immutable)であるべきです。

Pythonの組み込み型では、整数、文字列、タプルなどの不変型はデフォルトでハッシュ可能です。一方、リスト、辞書、セットなどの可変型はデフォルトでハッシュ不可能であり、これらのオブジェクトに対して__hash__を呼び出そうとするとエラーが発生します。

独自のクラスを作成する際、カスタムオブジェクトは通常、デフォルトでハッシュ可能です。しかし、もしクラス内で__eq__メソッドをオーバーライドしてオブジェクトの等価性を定義する場合、__hash__メソッドも適切にオーバーライドして、等しいオブジェクトが常に同じハッシュ値を返すようにする必要があります。あるいは、オブジェクトをハッシュ不可能にしたい場合は、クラス内で__hash__ = Noneと明示的に設定することが推奨されます。これにより、プログラムの意図しない動作やバグを防ぎ、期待通りの挙動を保証します。

構文(syntax)

1class MyClass:
2    def __hash__(self) -> int:
3        return 0

引数(parameters)

self, /

  • self: ハッシュ化されるオブジェクト自身

戻り値(return)

int

このメソッドは、オブジェクトのハッシュ値(整数)を返します。ハッシュ値は、オブジェクトを辞書や集合のキーとして使用する際に、高速な検索を可能にするために利用されます。

関連コンテンツ

関連プログラミング言語