0
2

[Python]dataclass

Posted at

dataclass

Pythonのdataclassは、Python 3.7から導入されたデータクラスを定義するための便利な機能です。dataclassを使用することで、データの保持と操作のためのクラスを簡潔に定義できます。以下では、dataclassの基本的な使い方や機能について詳細に説明します。

基本的な使い方

dataclassを使用するには、dataclassesモジュールをインポートする必要があります。

from dataclasses import dataclass

そして、dataclassデコレータをクラス定義の直前に記述します。dataclassデコレータを付けたクラスは、自動的にいくつかの特定の機能を持つようになります。

@dataclass
class MyClass:
    attr1: str
    attr2: int

この例では、MyClassというデータクラスが定義されています。attr1attr2はそれぞれ文字列と整数の属性です。dataclassデコレータにより、以下のような機能が自動的に追加されます:

  • __init__メソッド:属性を受け取るイニシャライザが自動的に生成されます。
  • __repr__メソッド:オブジェクトの文字列表現を返す__repr__メソッドが自動生成されます。
  • __eq__メソッド:オブジェクト同士の等価性を比較する__eq__メソッドが自動生成されます。

属性のデフォルト値と型ヒント

dataclassでは、属性にデフォルト値を設定したり、型ヒントを指定することができます。

@dataclass
class Point:
    x: float = 0.0
    y: float = 0.0

この例では、Pointクラスが定義されています。xyはデフォルト値として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は、データを保持し操作するシンプルで効果的な方法を提供するため、特にデータ処理において非常に便利です。

0
2
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
2