🐍
【Python】Enum の初期化時に想定外の値が渡されたらデフォルト値を返すようにしたい
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