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)
Yoksa Enum bilinen dize dönüştürmek gerekir:
Sadece daha belirgin olmak üzere
, böyle bir Enum nesnesine 'debug'
dize dönüştürmek istersiniz? class MyEnum(Enum):
a = 'aaa'
b = 123
print(MyEnum('aaa'), MyEnum(123))
veya:
Bu işlevsellik daha önce Enum yerleşik olarak 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 refactoring
Evet, aradığım şey buydu. Bu konuyla ilgili resmi belgelere bir bağlantı güzel olurdu. – Vladius
@Vladius: Bağlantı eklendi. –
Girişin dezenfekte edilmesi gerektiğinde geri dönüş değeri nedir? Build.get ('illegal', Build.debug) 'türünde bir şey var mı? – Hetzroni