通过枚举名称在字符串中查找枚举值 - Python
Find enum value by enum name in string - Python
我正在为 Python 枚举而苦苦挣扎。我创建了一个包含各种字段的枚举 class:
class Animal(Enum):
DOG = "doggy"
CAT = "cute cat"
我知道我可以用值访问这个枚举,即通过传递 Animal("doggy")
我将得到 Animal.DOG
。但是我想实现相同但反过来,假设我有 "DOG"
并且我用它来查找 "doggy"
.
示例:
str_to_animal_enum("DOG") = Animal.DOG
我想我可以重写 Enum class 的 init 函数来检查我们作为参数输入的字符串名称是否在 Enum 名称中有代表,如果是的话我们有一场比赛。
像这样:
def __init__(cls, name):
for enum in all_enums:
if enum.name == name:
return enum
但是这个解决方案看起来计算量很大。假设我有 100 个名字要查找,对于每个名字,我们必须在最坏的情况下进行 N 次迭代,其中 N 是枚举 class.
中的枚举数
我认为应该有更好的东西,但我不知道是什么。您对如何实施有任何想法吗?谢谢:)
根据the manual:
>>> Animal.DOG.value
'doggy'
>>> Animal.DOG.name
'DOG'
>>> # For more programmatic access, with just the enum member name as a string:
>>> Animal['DOG'].value
'doggy'
我正在为 Python 枚举而苦苦挣扎。我创建了一个包含各种字段的枚举 class:
class Animal(Enum):
DOG = "doggy"
CAT = "cute cat"
我知道我可以用值访问这个枚举,即通过传递 Animal("doggy")
我将得到 Animal.DOG
。但是我想实现相同但反过来,假设我有 "DOG"
并且我用它来查找 "doggy"
.
示例:
str_to_animal_enum("DOG") = Animal.DOG
我想我可以重写 Enum class 的 init 函数来检查我们作为参数输入的字符串名称是否在 Enum 名称中有代表,如果是的话我们有一场比赛。
像这样:
def __init__(cls, name):
for enum in all_enums:
if enum.name == name:
return enum
但是这个解决方案看起来计算量很大。假设我有 100 个名字要查找,对于每个名字,我们必须在最坏的情况下进行 N 次迭代,其中 N 是枚举 class.
中的枚举数我认为应该有更好的东西,但我不知道是什么。您对如何实施有任何想法吗?谢谢:)
根据the manual:
>>> Animal.DOG.value
'doggy'
>>> Animal.DOG.name
'DOG'
>>> # For more programmatic access, with just the enum member name as a string:
>>> Animal['DOG'].value
'doggy'