🕌

Pythonのdataclassについての備忘録

に公開

Pythonのdataclassについてまとめています。
「self.var = var」みたいに連打しなくてよくなるのは便利ですね!
初見だと意味不明でしたが...

試験的に、生成AIとのやりとりして調べた結果を記事の形にまとめてもらっています。

@dataclassデコレータについて

  • Python 3.7以降で利用可能な@dataclassデコレータを使用すると、クラスの定義を簡潔に書くことができます。
  • @dataclassは、インスタンス変数のための__init__メソッドなどを自動的に生成します。

独自の__init__メソッドを定義する場合

  • @dataclassを使用しても、独自の__init__メソッドを定義することは可能です。
  • 独自の初期化ロジックを追加する場合は、__post_init__メソッドを使用すると良いです。

インスタンス変数とクラス変数の区別

  • インスタンス変数は、@dataclassデコレータ直下のクラス定義内で型注釈と共に宣言されます。
  • クラス変数は、ClassVarを用いて型注釈がついた形で、または直接値を割り当てる形で宣言されます。
  • ClassVarは、変数がクラス変数であることを示し、@dataclassの自動生成プロセスから除外されます。

@dataclassの使用例

from dataclasses import dataclass, field
from typing import ClassVar

@dataclass
class Example:
    # インスタンス変数
    name: str
    age: int = field(default=18)

    # クラス変数
    count: ClassVar[int] = 0

    def __post_init__(self):
        Example.count += 1

# インスタンスの作成
example1 = Example(name="Alice")
example2 = Example(name="Bob", age=20)

# クラス変数へのアクセス
print(Example.count)  # 2

Discussion