python - 当枚举值是元组时从字符串获取枚举对象?

标签 python enums

我有以下形式的Enum

class ItemType(Enum):
    ITEM1 = ('Desc1', AnotherEnum.ONE)
    ITEM2 = ('Desc2', AnotherEnum.TWO)

我正在尝试从 JSON 字符串实例化 ItemType 类型的对象。

例如,我想获取逻辑上表示字符串'Desc1'ItemType。如果枚举值的形式为ITEM1 = 'Desc1',我可以简单地执行ItemType('Desc1')。但在目前的形式中,我不确定如何实现查找方法。

有办法做到这一点吗?

最佳答案

Enum 只是一个,那么替代构造函数怎么样?这是最明确的。

class ItemType(Enum):
    ITEM1 = ('Desc1', AnotherEnum.ONE)
    ITEM2 = ('Desc2', AnotherEnum.TWO)
    
    @classmethod
    def from_description(cls, description):
        for item in cls:
            if item.value[0] == description:
                return item
        raise ValueError("%r is not a valid %s description" % (description, cls.__name__))

然后您可以执行ItemType.from_description('Desc1')

或者,如果您希望 ItemType('Desc1') 正常工作,从 Python 3.6 开始,您可以实现 _missing_:

class ItemType(Enum):
    ITEM1 = ('Desc1', AnotherEnum.ONE)
    ITEM2 = ('Desc2', AnotherEnum.TWO)
    
    @classmethod
    def _missing_(cls, value):
        for item in cls:
            if item.value[0] == value:
                return item
        return super()._missing_(value)

我的选择取决于通过描述查找是否是一件自然的事情。如果它特定于转换 JSON,请坚持使用备用构造函数。否则,当然,请选择第二个选项。但是,在这种情况下,我想知道该值是否是存储相关 AnotherEnum 的最佳位置。也许您应该有一个方法 to_another_enum(),一个 AnotherEnum 上的备用构造函数,或者两者都有......?

关于python - 当枚举值是元组时从字符串获取枚举对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47934289/

相关文章:

python - macOS : PyQt5 conflict with opencv-python

java - 对于不扩展 Enum 的泛型,Enum.valueOf 的替代品?

swift - 两个枚举的单独常见情况 - Swift

python - Theano 无法使用 theano 配置 cnmem = 1 导入

c# - 为什么 typeof(System.Enum).IsEnum = false?

java - 使用枚举中定义的静态字段作为构造函数中的参数

ruby-on-rails - Rails Enum,如何从数组中删除一个值?

Python 测试不工作

python - 在Python中使用YouTube API按相关性排序

python - 按操作系统限制 Environment.yml 依赖项