🐍

【Python】Enum の初期化時に想定外の値が渡されたらデフォルト値を返すようにしたい

2024/07/04に公開

Python の Enum をコンストラクタを用いて初期化するとき、想定外の値が渡された場合の処理を定義することができる _missing_ というメソッドが便利だったので紹介します。

例を示すために、Color という StrEnum を継承した Enum を定義してみました。

class Color(StrEnum):
  RED = "#ff0000"
    GREEN = "#00ff00"
  BLUE = "#0000ff"

この Enum はユーザーが入力したカラーコードを元に初期化されるため、想定外の値が入力される可能性がある設定とします。つまり、Color("#0ff000") といったことが起きるケースが考えられるということです。

こういった想定外の入力を受けた場合には、デフォルト値である Color.RED を返すことにしましょう。そういった処理を定義するために _missing_ という特殊メソッドを利用することができます。

class Color(StrEnum):
  RED = "#ff0000"
    GREEN = "#00ff00"
  BLUE = "#0000ff"

  @classmethod
  def _missing_(cls, value):
    logging.warning(f"Color: {value} is invalid. Use default value.")
    return cls.RED

まとめ

今回は Python 3.6 から利用できる _missing_ という特殊メソッドについて紹介しました。他にもいろいろメソッドがあるようですので深堀ると面白いかもしれませんね。

Discussion