我可以很容易地创建一个类,比如
class MyEnum(enum.Enum):
BOB = "bob"
RALPH = "ralph"
ETC = "etc"
然后我可以按枚举值分配变量:
a = MyEnum('bob')
,,-,我想把变量赋值给正确的值。也就是说,我想做
a = MyEnum('bob')
b = MyEnum('Bob')
c = MyEnum('BOB')
并让它们都工作,并且都映射到相同的枚举值。
有没有一种不需要工厂方法就能做到这一点的方法?我目前已经定义了一个create
方法,所以a = MyEnum.create('Bob')
可以工作,但我希望它是无缝的。
发布于 2018-08-29 02:38:02
这可以通过对EnumMeta
进行子类化来实现,它是负责定义由MyEnum('Bob')
调用的__call__
方法的metaclass。
import enum
class CaseInsensitiveEnum(enum.EnumMeta):
def __call__(self, string):
string = string.lower() # convert the string to lowercase
return super().__call__(string)
class MyEnum(enum.Enum, metaclass=CaseInsensitiveEnum):
BOB = "bob"
RALPH = "ralph"
ETC = "etc"
(请记住,所有枚举值都必须是小写的;即BOB = 'Bob'
不起作用。)
演示:
>>> MyEnum('Bob')
<MyEnum.BOB: 'bob'>
>>> MyEnum('Bob') is MyEnum.BOB
True
https://stackoverflow.com/questions/52063986
复制相似问题