Я понимаю смысл использования 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
с, особенно когда строки представляют другое значение под:
Этот пример похож на мой (под Перечисления могут взаимодействовать ), но я изо всех сил пытался понять техническую дискуссию вокруг него, и он показывает только настройку Enum
, а не ее использование: