0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HashableなDataclassを作る

Posted at

PythonにはHashable,Unhashableという概念があり、辞書型の鍵にしようできるのはHashableなオブジェクトのみ。

割と便利なDataclassを使っていて辞書の鍵として使いたいときに、Hashableにする方法を調べたのでメモ。

データクラス内にHashableな値しかない場合

デコレーターのfrozen=Trueをつけると、データクラス内の値がHashableになる。

from dataclasses import dataclass

@dataclass(frozen=True)
class Sample:
    a: int
    b: str

データクラス内にHashableでない値がある場合

対応する値をHashableにする。
下記例では、aの値をfrozensetにすることでHashableになる。
型変換の処理は__post_init__で行うことで自動的に行われる。

from dataclasses import dataclass

@dataclass(frozen=True)
class Sample:
    a: int
    b: str
    c: list | frozenset
    def __post_init__(self):
        object.__setattr__(self, "c", frozenset(self.c))
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?