PythonのData Classes

PythonのdataclassはPython3.7からの機能となり、クラスを定義する際の__init__、__repr__、__eq__などの定義を自動で作成し省略できます。

使い方はクラス定義にdataclassデコレータをつけます。

from dataclasses import dataclass

@dataclass
class Example:
    x: int = 0
    y: int = 0
    
e = Example(x=1, y=2)
e.x >> 1
e.y >> 2

このように使うことで自分で__init__を定義する必要がなくなります。

普通のクラスのように__init__で処理を行う場合には__post_init__と定義し、処理を書く事ができます。

@dataclass
class Example:
    x: int = 0
    y: int = 0
    c: InitVar[int] = 0
    def __post_init__(self, c):
        self.x = c
        self.y = c + 1
        
e = Example(c=1)
e.x >> 1
e.y >> 2

ここでdataclasses.InitVarと定義されたフィールドは__init__のみで使用され、クラスのフィールドとは認識されずインスタンスには保持されません。

Example(c=1)
>> Example(x=1, y=2)


この記事が気に入ったらサポートをしてみませんか?