如何在Python中通过动态传递"枚举成员名称"来获取"值"?
有关示例,请考虑以下枚举
import enum
class Animal(enum.Enum):
DOG = "This is Dog"
CAT = "This is cat"
LION = "This is Lion"
我想写一个像下面这样的通用函数,它必须返回This is Dog
。
def get_enum_value("DOG"):
#
# SOME CODE HERE TO GET THE VALUE FOR THE GIVEN (METHOD ARGUMENT) ENUM PROPERTY NAME
#
简化和完整的代码:
## Enum definition
import enum
class Animal(enum.Enum):
DOG = "This is Dog"
CAT = "This is cat"
LION = "This is Lion"
## method to return enum value when pass the enum member name
def get_enum_member_value(enum_member_name):
enum_member_value = Animal[enum_member_name].value
return enum_member_value
## execute the method and print the value
print(get_enum_member_value("DOG"))
基于问题编辑的答案:
您所追求的功能内置于:
>>> Animal["DOG"].value
"This is Dog"
或
>>> member = "DOG"
>>> Animal[member].value
"This is Dog"
使其成为函数的唯一原因是用于错误处理 - 例如,如果您想优雅地处理传入的非成员名称。
我看到两个可能的问题(您的函数名称和术语的使用令人困惑(:
- 如何获得
.value
房产; - 如何获取任何属性的值(两个内置属性是
value
和name
(
实际上,我知道还会看到第三种选择:
- 如何获取传入名称的属性的值(因此
get_enum_value
是一种Animal
方法,而不是缩进所建议的单独函数(
仅回答最后一个问题,解决方案如下:
import enum
class Animal(enum.Enum):
#
DOG = "This is Dog"
CAT = "This is cat"
LION = "This is Lion"
#
def get_enum_value(self, enum_property_name):
return getattr(self, enum_property_name)
和使用中:
>>> Animal.LION.get_enum_value('name')
'LION'