python中的枚举的定义,使用Python自定义枚举

I can easily create a class like

class MyEnum(enum.Enum):

BOB = "bob"

RALPH = "ralph"

ETC = "etc"

Then I can assign variables by enum value:

a = MyEnum('bob')

However -- I want to assign variables by things that could be the correct value. I.e., I'd like to do

a = MyEnum('bob')

b = MyEnum('Bob')

c = MyEnum('BOB')

and have them all work, and all map to the same enum value.

Is there a way of doing this without making a factory method? I've currently defined a create method, so a = MyEnum.create('Bob') works, but I'd like things to be seamless.

解决方案

The thing you are looking for is called _missing_ and is available in the stdlib as of Python3.6, and in aenum1 as of 2.0.

class MyEnum(Enum):

BOB = "bob"

RALPH = "ralph"

ETC = "etc"

@classmethod

def _missing_(cls, value):

for member in cls:

if member.value == value.lower():

return member

If _missing_ fails to return a MyEnum member then EnumMeta will raise an exception (so _missing_ doesn't have to worry about that part)2.

2 Thanks, Aran-Fey, for bringing that up.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值