Answers:
此功能已内置到枚举[1]中:
>>> from enum import Enum
>>> class Build(Enum):
...   debug = 200
...   build = 400
... 
>>> Build['debug']
<Build.debug: 200>
[1]官方文档: Enum programmatic access
Enum没有.get()方法,但是您可以根据需要添加一个方法,或者只是创建一个基Enum类并始终从该方法继承。
                    Build('debug')
                    Build('debug')。类构造函数必须走价值,即200或400在这个例子中。要传递名称,必须使用方括号,如答案所示。
                    另一种选择(如果你的字符串不映射1-1到您的枚举的情况下特别有用)是一个添加staticmethod到您的Enum,如:
class QuestionType(enum.Enum):
    MULTI_SELECT = "multi"
    SINGLE_SELECT = "single"
    @staticmethod
    def from_str(label):
        if label in ('single', 'singleSelect'):
            return QuestionType.SINGLE_SELECT
        elif label in ('multi', 'multiSelect'):
            return QuestionType.MULTI_SELECT
        else:
            raise NotImplementedError那你可以做 question_type = QuestionType.from_str('singleSelect')
def custom_enum(typename, items_dict):
    class_definition = """
from enum import Enum
class {}(Enum):
    {}""".format(typename, '\n    '.join(['{} = {}'.format(k, v) for k, v in items_dict.items()]))
    namespace = dict(__name__='enum_%s' % typename)
    exec(class_definition, namespace)
    result = namespace[typename]
    result._source = class_definition
    return result
MyEnum = custom_enum('MyEnum', {'a': 123, 'b': 321})
print(MyEnum.a, MyEnum.b)还是需要将字符串转换为已知的 Enum?
class MyEnum(Enum):
    a = 'aaa'
    b = 123
print(MyEnum('aaa'), MyEnum(123))要么:
class BuildType(Enum):
    debug = 200
    release = 400
print(BuildType.__dict__['debug'])
print(eval('BuildType.debug'))
print(type(eval('BuildType.debug')))    
print(eval(BuildType.__name__ + '.debug'))  # for work with code refactoringdebug字符串转换为这样的枚举:  python class BuildType(Enum):     debug = 200     release = 400 
                    __dict__相同getattr吗?我担心与内部Python属性发生名称冲突
                    getattr。我认为没有名称冲突的原因。您只是不能将关键字设置为类的字段。
                    我的类Java解决方案。希望它可以帮助某人...
    from enum import Enum, auto
    class SignInMethod(Enum):
        EMAIL = auto(),
        GOOGLE = auto()
        @staticmethod
        def value_of(value) -> Enum:
            for m, mm in SignInMethod.__members__.items():
                if m == value.upper():
                    return mm
    sim = SignInMethod.value_of('EMAIL')
    print("""TEST
    1). {0}
    2). {1}
    3). {2}
    """.format(sim, sim.name, isinstance(sim, SignInMethod)))对@rogueleaderr答案的改进:
class QuestionType(enum.Enum):
    MULTI_SELECT = "multi"
    SINGLE_SELECT = "single"
    @classmethod
    def from_str(cls, label):
        if label in ('single', 'singleSelect'):
            return cls.SINGLE_SELECT
        elif label in ('multi', 'multiSelect'):
            return cls.MULTI_SELECT
        else:
            raise NotImplementedError我只想通知这在python 3.6中不起作用
class MyEnum(Enum):
    a = 'aaa'
    b = 123
print(MyEnum('aaa'), MyEnum(123))您将不得不像这样以元组形式提供数据
MyEnum(('aaa',))编辑:这被证明是错误的。感谢指出我的错误的评论者
,在每个元素后面加上了一个(逗号)(就像这些元素是一个列表一样),那么它将每个元素视为一个元组。(即a = 'aaa',实际上与相同a = ('aaa',))
                    ,在定义该枚举以某种方式将值转换为元组时放下每一行
                    
Build.get('illegal', Build.debug)?