dataclassとは?
Pythonのdataclassとは、データを保持することを目的としたclassをより簡潔にわかりやすく定義するためのデコレータです。
dataclassの使い方
従来のデータクラス作成方法
従来、Pythonでデータ保持を目的としたクラスを定義しようとすると以下のようになると思います。
class Person():
def __init__(self):
self.first_name = "tarou"
self.last_name = "yamada"
self.age = 20
dataclassデコレータを利用したデータクラス定義
dataclassを利用することで、先ほどのクラスを以下のように書くことができます。
from dataclasses import dataclass
@dataclass
class Person:
first_name: str = "taro"
last_name: str = "yamada"
age: int = 20
dataclassを使うメリット
dataclassを使うメリットとして以下が挙げられます。
1. def __init__(self):
を書く必要がない。
2. タイプアノテーションしやすい。
3. 中身を確認しやすい
従来の書き方の場合:
>>> person = Person()
>>> print(person)
<__main__.Person object at 0x100f613d0>
dataclassを使う場合:
>>> person = Person()
>>> print(person)
Person(first_name='taro', last_name='yamada', age=20)
注意点(デフォルトでミュータブル)
dataclassはデフォルトで、ミュータブル(定義後、値の変更可能)です。
イミュータブル(定義後、値を変更したくない)にしたい場合は、以下のようにfrozen=True
をつけます。
from dataclasses import dataclass
@dataclass(frozen=True)
class Person:
first_name: str = "taro"
last_name: str = "yamada"
age: int = 20
値を上書きしようとするとエラーになる。
>>> person = Person()
>>> person.age=100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field 'age'