Python Dataclasses

Dataclasses は Python のクラスですが、データオブジェクトを格納するのに適しています。 このモジュールは、ユーザー定義クラスに __init__()__repr__() などの生成された特殊メソッドを自動的に追加するためのデコレータと関数を提供します。

特徴 (Features)

  1. データ型を表し、データを格納します。例:数値。ORM に慣れている人にとって、モデルインスタンスはデータオブジェクトです。それは特定の種類のエンティティを表します。エンティティを定義または表す属性を保持します。

  2. 同種の他のオブジェクトと比較できます。例:数値は他の数値よりも大きい、小さい、または等しい場合があります。

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