如何通过在Python中动态传递“枚举成员名称”来获取“值”?

时间:2019-12-12 08:52:20

标签: python python-3.x python-2.7 enums

如何通过在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 
    #

2 个答案:

答案 0 :(得分:1)

根据问题编辑答案:

内置的功能:

>>> Animal["DOG"].value
"This is Dog"

>>> member = "DOG"
>>> Animal[member].value
"This is Dog"

使该函数成为错误处理的唯一原因-例如,如果您要优雅地处理传入的非成员名称。


我看到两个可能的问题(您的函数名称和术语用法令人困惑):

  • 如何获取.value属性;
  • 如何获取任何属性的值(两个内置valuename

实际上,我也知道第三个选项:

  • 如何获取传入名称的属性的值(因此get_enum_valueAnimal的方法,而不是您的缩进建议的独立函数)

仅回答最后一个问题,解决方案类似于:

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'

答案 1 :(得分:1)

完整的简化代码:

## 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"))