編集:この場合、Enumの利点に焦点を当てるために、この質問を元から大幅に編集しました(質問は主に意見に基づいているため保留されていました)
Enum
人間が読める文字列を基になる(数値などの)値に変換するときにを使用する意味を理解しています。この回答FederalHoliday
のクラスはその良い例です。
しかし、私が検討しているユースケースは、関数パラメーターが現在「魔法の文字列」として渡されている可能な値のセットに制限されている場合です。したがって、Enum
here を実装しても、コードの可読性は実際には向上しません (どちらかといえば、コードが煩雑になります)。そして、文字列を に変換するEnum
と、事実上同じ文字列 (つまり の名前Enum
) を比較するためだけに、やり過ぎのように感じます。
この回答には、列挙型の一般的な利点の素晴らしいリストがありますが、この場合にいくつ適用されるかはわかりません。
私が意味しているケースを明確にするために、ここにその例があり、 で指定された特定の大文字で文字列を出力する関数がありますmode
:
def print_my_string(my_string, mode):
if mode == 'l':
print(my_string.lower())
elif mode == 'u':
print(my_string.upper())
elif mode == 'c':
print(my_string.capitalize())
else:
raise ValueError("Unrecognised mode")
これを実際に確認するには、次を実行します。
for mode in ['l', 'u', 'c']:
print_my_string("RaNdoM CAse StRING", mode)
与えます:
random case string
RANDOM CASE STRING
Random case string
だから私の質問は:
Enum
文字列がその下に別の値を表していない場合、どのような利点がありますか? コードをより堅牢にする方法はありますか?
私が読んだ他のもの:
主Enum
に一般的な s について、特に文字列がその下の別の値を表す場合:
これには私のものと似た例があるようです (下Enums are interoperable )、私はそれに関する技術的な議論を理解するのに苦労しましEnum
た.
編集:この場合、文字列を対応する関数に直接マップすることは可能ですが、コードがより複雑であるため、実際の使用例ではこれは不可能です。(ただし、コメントで提案した人からの良いヒントです。)