Answers:
您可以使用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]
a = [(int(v), str(v)) for v in Color]
然后print(a)
。
[(color.value, color.name) for color in Color]
要将Enum与任何类型的值一起使用,请尝试以下操作:
更新了一些改进...谢谢@Jeff,请注意!
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')]
@classmethod
需要创建Color
类的实例。这就是为什么staticmethod
这里似乎是正确的选择。
@classmethod
和return list(map(lambda c: c.value, cls))
代替。
根据@Jeff的回答,将其重构为使用,classmethod
以便您可以对任何枚举重用相同的代码:
from enum import Enum
class ExtendedEnum(Enum):
@classmethod
def list(cls):
return list(map(lambda c: c.value, cls))
class OperationType(ExtendedEnum):
CREATE = 'CREATE'
STATUS = 'STATUS'
EXPAND = 'EXPAND'
DELETE = 'DELETE'
print(OperationType.list())
产生:
['CREATE', 'STATUS', 'EXPAND', 'DELETE']
class enum.Enum
是解决所有枚举需求的类,因此您只需要继承它,并添加自己的字段即可。然后,您只需要调用其属性即可:name
&value
:
from enum import Enum
class Letter(Enum):
A = 1
B = 2
C = 3
print({i.name: i.value for i in Letter})
# prints {'A': 1, 'B': 2, 'C': 3}
所以Enum
有一个命令__members__
。@ozgur提出的解决方案确实是最好的,但是您可以通过做更多的工作来做到这一点,它的作用相同
[color.value for color_name, color in Color.__members__.items()]
的 __members__
如果您想在字典中动态插入内容,字典可能会派上用场...在某些疯狂的情况下。
[编辑]
显然__members__
不是字典,而是地图代理。这意味着您不能轻松地向其中添加项目。
但是,您可以做一些奇怪的事情,例如MyEnum.__dict__['_member_map_']['new_key'] = 'new_value'
,然后可以使用新的密钥,例如MyEnum.new_key
....,但这只是实现细节,不应使用。黑魔法需要付出巨大的维护费用。
__members__
吗?允许扩展从而创建新Enum
成员的一种有趣的方式。...顺便说一句,赞扬了为表带来了新的(对我来说)属性。
您可以使用iter()函数:
from enum import IntEnum
class Color(IntEnum):
RED = 1
BLUE = 2
l=[]
for i in iter(Color):
l.append(i.value)
print(l)