1

編集:この場合、Enumの利点に焦点を当てるために、この質問を元から大幅に編集しました(質問は主に意見に基づいているため保留されていました)


Enum人間が読める文字列を基になる(数値などの)値に変換するときにを使用する意味を理解しています。この回答FederalHolidayのクラスはその良い例です。

しかし、私が検討しているユースケースは、関数パラメーターが現在「魔法の文字列」として渡されている可能な値のセットに制限されている場合です。したがって、Enumhere を実装しても、コードの可読性は実際には向上しません (どちらかといえば、コードが煩雑になります)。そして、文字列を に変換する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た.


編集:この場合、文字列を対応する関数に直接マップすることは可能ですが、コードがより複雑であるため、実際の使用例ではこれは不可能です。(ただし、コメントで提案した人からの良いヒントです。)

4

1 に答える 1