組み込み開発のためのPython · レッスン 209 / 220
クラスで機器の状態をまとめる
状態と操作を一つの型にまとめ、初期化条件や不変条件を守ります。
クラスは、関連するデータと操作を一緒に扱う仕組みです。必要な状態を限定し、生成直後から有効なオブジェクトになるように設計します。
状態を持つ理由を明確にする
接続先や接続状態を複数の独立変数にすると、組合せによって矛盾が起きることがあります。クラスで状態と操作を束ねる場合も、何を所有するかを明確にし、外部から内部状態を無秩序に変更できない設計にします。単なるデータの束なら、単純な関数やデータクラスの方が適切なこともあります。
資源を持つオブジェクトは閉じ方を決める
通信ポートなどのOS資源を扱うクラスでは、接続・切断・再接続時の状態遷移を明確にします。例外時に開いたままにならないよう、コンテキストマネージャーや明示的な終了メソッドを設計します。複数箇所から同じ資源を閉じる場合の挙動も定義します。
コード例
手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。
class SampleWindow:
def __init__(self, limit: int) -> None:
if limit <= 0:
raise ValueError("limit は正の値が必要です")
self._limit = limit
self._values: list[int] = []
def add(self, value: int) -> None:
if len(self._values) == self._limit:
self._values.pop(0)
self._values.append(value)
def values(self) -> tuple[int, ...]:
return tuple(self._values)手を動かす課題
保存件数を制限するサンプル窓を作り、上限到達後も件数が増えないことをテストしましょう。