我使用Enum4库创建一个枚举类如下:
class Color(Enum):
RED = 1
BLUE = 2
我想把[1,2]作为一个列表打印出来。我怎样才能做到这一点呢?
我使用Enum4库创建一个枚举类如下:
class Color(Enum):
RED = 1
BLUE = 2
我想把[1,2]作为一个列表打印出来。我怎样才能做到这一点呢?
当前回答
要对任何类型的值使用Enum,请尝试以下方法: 更新了一些改进…谢谢@杰夫,谢谢你的小费!
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 'GREEN'
BLUE = ('blue', '#0000ff')
@staticmethod
def list():
return list(map(lambda c: c.value, Color))
print(Color.list())
结果:
[1, 'GREEN', ('blue', '#0000ff')]
其他回答
你可以有一个这样的SuperEnum:
from enum import Enum
class SuperEnum(Enum):
@classmethod
def to_dict(cls):
"""Returns a dictionary representation of the enum."""
return {e.name: e.value for e in cls}
@classmethod
def keys(cls):
"""Returns a list of all the enum keys."""
return cls._member_names_
@classmethod
def values(cls):
"""Returns a list of all the enum values."""
return list(cls._value2member_map_.keys())
像这样使用它:
class Roles(SuperEnum):
ADMIN = 1
USER = 2
GUEST = 3
所以你可以:
Roles.to_dict() # {'ADMIN': 1, 'USER': 2, 'GUEST': 3}
Roles.keys() # ['ADMIN', 'USER', 'GUEST']
Roles.values() # [1, 2, 3]
你可以使用IntEnum:
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
print(int(Color.RED)) # prints 1
获取整型数组的列表:
enum_list = list(map(int, Color))
print(enum_list) # prints [1, 2]
只使用:
[e.value for e in Color]
生产:
[1, 2]
要获得名称,请使用:
[e.name for e in Color]
生产:
(“红”、“蓝”)
您可以执行以下操作:
[e.value for e in Color]
Enum有一个__members__字典。 @ozgur提出的解决方案确实是最好的,但你可以这样做,它做的是同样的事情,但需要更多的工作
(颜色。color . __member__ .items()中color_name的值
__members__字典可以派上用场,如果你想在其中动态地插入东西…在一些疯狂的情况下。
(编辑) 显然__members__不是一个字典,而是一个映射代理。这意味着你不能轻易地向它添加项目。
你也可以做一些奇怪的事情,比如MyEnum。__dict__['_member_map_']['new_key'] = 'new_value',然后你可以使用像myenumer .new_key....这样的新键但这只是一个实现细节,不应该玩弄。黑魔法需要大量的维护费用。