如何在 Python 中动态传递'enum member name'来获取'value'?



如何在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房产;
  • 如何获取任何属性的值(两个内置属性是valuename(

实际上,我知道还会看到第三种选择:

  • 如何获取传入名称的属性的值(因此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'

最新更新