我理解在Enum
将人类可读的字符串转换为基础(例如数字)值时使用的意义,这个答案FederalHoliday
中的类就是一个很好的例子。
但是我正在考虑的用例只是函数参数被限制为一组可能的值,这些值当前作为“魔术字符串”传递。所以在Enum
这里实现并不会真正提高代码的可读性(如果有的话,它会使代码更加混乱)。将一个字符串变成一个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
,而不是使用它: