tel*_*ios 5 python python-3.11
问题
如何迭代枚举标志别名?
from enum import Flag
class Color(Flag):
RED = 1
BLUE = 2
GREEN = 4
WHITE = RED | BLUE | GREEN # <- How do I retrieve this alias?
list(Color)
# [<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 4>]
# How do I include Color.White and other aliases in this list?
Run Code Online (Sandbox Code Playgroud)
根据文档,__iter__仅返回非别名成员。
__iter__(self):
返回所有包含的非别名成员
版本 3.11 中的更改:迭代期间不再返回别名。
您可以使用__members__来获取枚举名称到值的映射。
来自 python文档:
__members__是 member_name:member 项的只读有序映射。它仅在课堂上可用。
mapping = Color.__members__
# mappingproxy({'RED': <Color.RED: 1>,
# 'BLUE': <Color.BLUE: 2>,
# 'GREEN': <Color.GREEN: 4>,
# 'WHITE': <Color.WHITE: 7>})
colors_list = list(mapping.values())
# [<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 4>, <Color.WHITE: 7>]
Run Code Online (Sandbox Code Playgroud)
不过,对此有一个警告。如果您有相似的枚举值,那么您将获得为它们返回的相同值。
class Color(Flag):
RED = 1
BLUE = 1
print(Color.__members__)
# mappingproxy({'RED': <Color.RED: 1>, 'BLUE': <Color.RED: 1>})
Run Code Online (Sandbox Code Playgroud)
有用的链接:Enum HOWTO:迭代、Enum HOWTO:复制枚举成员和值