【发布时间】:2018-10-20 13:20:58
【问题描述】:
我理解在将人类可读的字符串转换为基础(例如数字)值时使用 Enum 的意义,this answer 中的 FederalHoliday 类就是一个很好的例子。
但我正在考虑的用例只是将函数参数限制为一组可能的值,这些值当前作为“魔术字符串”传递。所以在这里实现Enum 并不会真正提高代码的可读性(如果有的话,它会使代码更加混乱)。将字符串转换为Enum,只是为了比较实际上是相同的字符串(即Enum 的名称)感觉有点矫枉过正。
This answer 列出了枚举的一般优势,但我不确定其中有多少适用于这种情况。
为了澄清我的意思,这里有一个例子,它有一个函数可以打印一个由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 带来什么优势?有什么方法可以使代码更健壮吗?它添加什么吗?
我读过的其他东西:
主要是关于Enums,特别是当字符串代表下面的另一个值时:
这似乎有一个类似于我的示例(在 Enums are interoperable 下),但我很难理解围绕它的技术讨论,它只显示设置Enum,而不是使用它:
【问题讨论】:
标签: python python-3.x enums magic-string