dataclass
Pythonのdataclass
は、Python 3.7から導入されたデータクラスを定義するための便利な機能です。dataclass
を使用することで、データの保持と操作のためのクラスを簡潔に定義できます。以下では、dataclass
の基本的な使い方や機能について詳細に説明します。
基本的な使い方
dataclass
を使用するには、dataclasses
モジュールをインポートする必要があります。
from dataclasses import dataclass
そして、dataclass
デコレータをクラス定義の直前に記述します。dataclass
デコレータを付けたクラスは、自動的にいくつかの特定の機能を持つようになります。
@dataclass
class MyClass:
attr1: str
attr2: int
この例では、MyClass
というデータクラスが定義されています。attr1
とattr2
はそれぞれ文字列と整数の属性です。dataclass
デコレータにより、以下のような機能が自動的に追加されます:
-
__init__
メソッド:属性を受け取るイニシャライザが自動的に生成されます。 -
__repr__
メソッド:オブジェクトの文字列表現を返す__repr__
メソッドが自動生成されます。 -
__eq__
メソッド:オブジェクト同士の等価性を比較する__eq__
メソッドが自動生成されます。
属性のデフォルト値と型ヒント
dataclass
では、属性にデフォルト値を設定したり、型ヒントを指定することができます。
@dataclass
class Point:
x: float = 0.0
y: float = 0.0
この例では、Point
クラスが定義されています。x
とy
はデフォルト値として0.0
を持つ浮動小数点数型です。
不変なデータクラス
dataclass
を不変な(immutable)データクラスとして定義することもできます。これは、属性の値が一度設定されたら変更できないクラスです。
from dataclasses import dataclass
@dataclass(frozen=True)
class ImmutableClass:
attr1: str
attr2: int
このように@dataclass(frozen=True)
と指定することで、生成されたクラスは不変になります。そのため、インスタンスを作成後に属性を変更することはできません。
メソッドの追加
dataclass
にはデフォルトで生成される特殊メソッドに加えて、通常のメソッドも自由に追加することができます。
@dataclass
class MyClass:
attr1: str
attr2: int
def my_method(self):
return f"{self.attr1} - {self.attr2}"
継承とdataclass
dataclass
は通常のクラスと同様に継承することができます。継承した場合、親クラスのdataclass
の特性が引き継がれます。
@dataclass
class ParentClass:
attr1: str
attr2: int
@dataclass
class ChildClass(ParentClass):
attr3: float
dataclassの利点
-
簡潔な定義:属性の宣言が簡単で、初期化や比較などの特殊メソッドが自動生成されるため、コードの量が少なくて済みます。
-
デフォルト値や型ヒントのサポート:属性にデフォルト値を設定したり、型ヒントを利用することが容易です。
-
不変なデータクラスのサポート:
frozen=True
を指定することで、不変なデータ構造を定義することができます。
Pythonのdataclass
は、データを保持し操作するシンプルで効果的な方法を提供するため、特にデータ処理において非常に便利です。