2022/11/11 追記
StrEnum
がPython11で実装されたのでそれも使いましょう。
Enumは複数の定数をクラスに纏めて管理できる
import enum
class Option(enum.Enum):
A = "A"
B = "B"
C = "C"
my_choice = Option.A
print(my_choice)
# <Option.A: 'A'>
このように定義すると、Option.A
のように定数を呼び出すことができLiteral
と違いタイプミスや、定数の値を間違えてもエラーとして検出できる。
Enumは文字列と比較できない
my_choice = Option.A
print(my_choice == "A")
# False
EnumはEnum.Valuesのインスタンスなので、文字列と比較するとFalseになる。
解決策
クラスを定義する際にstr
を継承することで文字列と比較できるようになる。
import enum
class Option(str, enum.Enum):
A = "A"
B = "B"
C = "C"
my_choice = Option.A
print(my_choice == "A")
# True