組み込み開発のためのPython · レッスン 210 / 220

dataclassで測定レコードを表す

dataclassとEnumを使い、値の意味や状態名を明示したデータ構造を作ります。

辞書は柔軟ですが、必須項目や値の意味がコードだけでは曖昧になることがあります。安定した記録形式には、名前付きのデータクラスを使うと読みやすくなります。

レコードの形を一か所で定義する

`dataclass`は、フィールドを持つクラスを簡潔に定義できます。型注釈を付けるとIDEや静的解析が支援しやすくなりますが、不正な値を自動で拒否するわけではありません。コンストラクターや検証関数で範囲、単位、相互の整合性を確認します。

状態を文字列の寄せ集めにしない

接続状態など選択肢が限られる項目には`Enum`を使うと、表記ゆれを防ぎやすくなります。後からログやJSONに出力する場合は、安定した外部表現を別に定め、プログラム内部の名前変更で保存データが壊れないようにします。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

from dataclasses import dataclass

@dataclass(frozen=True)
class Measurement:
    timestamp_ms: int
    voltage_mv: int
    channel: str

    def __post_init__(self) -> None:
        if self.timestamp_ms < 0 or self.voltage_mv < 0:
            raise ValueError("時間と電圧は0以上で指定してください")

sample = Measurement(120, 3290, "A0")

手を動かす課題

温度測定のデータクラスを作り、時間・値・単位の不整合を検出してください。

参考資料

「6. 型・クラス・データ処理の設計」の章一覧へ