首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中创建自定义枚举

在Python中创建自定义枚举
EN

Stack Overflow用户
提问于 2018-08-29 02:09:33
回答 1查看 486关注 0票数 3

我可以很容易地创建一个类,比如

代码语言:javascript
复制
class MyEnum(enum.Enum):
  BOB = "bob"
  RALPH = "ralph"
  ETC = "etc"

然后我可以按枚举值分配变量:

a = MyEnum('bob')

-,我想把变量赋值给正确的值。也就是说,我想做

代码语言:javascript
复制
a = MyEnum('bob')
b = MyEnum('Bob')
c = MyEnum('BOB')

并让它们都工作,并且都映射到相同的枚举值。

有没有一种不需要工厂方法就能做到这一点的方法?我目前已经定义了一个create方法,所以a = MyEnum.create('Bob')可以工作,但我希望它是无缝的。

EN

回答 1

Stack Overflow用户

发布于 2018-08-29 02:38:02

这可以通过对EnumMeta进行子类化来实现,它是负责定义由MyEnum('Bob')调用的__call__方法的metaclass

代码语言:javascript
复制
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'不起作用。)

演示:

代码语言:javascript
复制
>>> MyEnum('Bob')
<MyEnum.BOB: 'bob'>
>>> MyEnum('Bob') is MyEnum.BOB
True
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52063986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档