Skip to main content

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'

参考文献