Python Dataclasses
Dataclasses は Python のクラスですが、データオブジェクトを格納するのに適しています。 このモジュールは、ユーザー定義クラスに __init__() や __repr__() などの生成された特殊メソッドを自動的に追加するためのデコレータと関数を提供します。
特徴 (Features)
データ型を表し、データを格納します。例:数値。ORM に慣れている人にとって、モデルインスタンスはデータオブジェクトです。それは特定の種類のエンティティを表します。エンティティを定義または表す属性を保持します。
同種の他のオブジェクトと比較できます。例:数値は他の数値よりも大きい、小さい、または等しい場合があります。
Python 3.7 は、クラスを dataclass に変換するために使用される dataclass デコレータを提供します。
class Number:
def __init__(self, val):
self.val = val
obj = Number(2)
obj.val
2
dataclass を使用した場合
# Dataclass: __init__ および __repr__ メソッドを自動生成
from dataclasses import dataclass
@dataclass # デコレータがクラスを dataclass に変換
class Number:
val: int # 型アノテーションが必要
obj = Number(2) # __init__ が自動作成される
obj.val
2
デフォルト値 (Default values)
データクラスのフィールドにデフォルト値を追加するのは簡単です。
# デフォルト値を持つ Dataclass: デフォルト値を持つフィールドは必須フィールドの後に配置する必要があります
@dataclass
class Product:
name: str # 必須フィールド
count: int = 0 # デフォルト値を持つオプションフィールド
price: float = 0.0 # デフォルト値を持つオプションフィールド
obj = Product("Python") # name のみ必須、他はデフォルト値を使用
obj.name
Python
obj.count
0
obj.price
0.0
クイズ
ログインしてこのクイズに回答し、学習の進捗を追跡できます
dataclass では、デフォルト値を持つフィールドはどこに配置する必要がありますか?
A. デフォルト値を持たないフィールドの前
B. デフォルト値を持たないフィールドの後
C. どこでもよい
D. 別々のセクション
型ヒント (Type hints)
dataclass ではデータ型を定義することが必須です。ただし、データ型を指定したくない場合は、typing.Any を使用します。
from dataclasses import dataclass
from typing import Any
@dataclass
class WithoutExplicitTypes:
name: Any
value: Any = 42