从 Python 中的字符串列表创建枚举类

fun*_*tal 6 python enums

当我运行这个时

from enum import Enum

class MyEnumType(str, Enum):
    RED   = 'RED'
    BLUE  = 'BLUE'
    GREEN = 'GREEN'

for x in MyEnumType:
    print(x)
Run Code Online (Sandbox Code Playgroud)

我按预期得到以下信息:

MyEnumType.RED
MyEnumType.BLUE
MyEnumType.GREEN
Run Code Online (Sandbox Code Playgroud)

是否可以从从其他地方获得的列表或元组创建这样的类?

也许与此有些类似

myEnumStrings = ('RED', 'GREEN', 'BLUE')

class MyEnumType(str, Enum):
    def __init__(self):
        for x in myEnumStrings :
            self.setattr(self, x,x)
Run Code Online (Sandbox Code Playgroud)

但是,与原始方式一样,我不想显式实例化对象。

Wil*_*lva 12

您可以使用枚举功能 API来实现此目的:

from enum import Enum


myEnumStrings = ('RED', 'GREEN', 'BLUE')
MyEnumType = Enum('MyEnumType', myEnumStrings)
Run Code Online (Sandbox Code Playgroud)

来自文档:

调用 Enum 的第一个参数是枚举的名称。

第二个参数是枚举成员名称的来源。它可以是空格分隔的名称字符串、名称序列、具有键/值对的二元组序列或名称到值的映射(例如字典)。

  • 好的谢谢。此外,为了获取原始枚举值的字符串,可以使用以下技巧:`myEnumStrings = ( (x,x) for x in ('RED', 'GREEN', 'BLUE'))`。 (2认同)