枚举

枚举 属于 Python

1 个练习

关于 枚举

在 Python 中,枚举是一组唯一的名称,这些名称绑定到唯一且常量的值。 Enums通过继承Enum类来定义。 内置枚举类型位于enum模块中,而Enum类可以通过from enum import Enum导入。

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

请注意,enum成员的值可以是任何数据类型,例如str、tuple、float等。

class Color(Enum):
    RED = 'red'
    GREEN = 'green'

Enums也可以使用函数调用语法来创建。

from enum import Enum

Animal = Enum('Animal', 'ANT BEE CAT DOG')
list(Animal)
#=> [<Animal.ANT: 1>, <Animal.BEE: 2>, <Animal.CAT: 3>, <Animal.DOG: 4>]

Animal.ANT.value
#=> 1

当把相同的值赋给enum中的两个成员时,后赋值的成员会成为前一个成员的别名。不允许为enum的两个不同成员使用相同的名称。

class Color(Enum):
    RED = 1
    GREEN = 2
    ALIAS_OF_RED = 1

Color.ALIAS_OF_RED
#=> <Color.RED: 1>

可以使用标准的for member in语法遍历枚举的成员:

for member in Color:
    print((member.name, member.value))
#=> (RED, 1)
#=> (GREEN, 2)

# __members__.items() helps you to loop through alias as well
for member in Color.__members__.items():
    print(member)
#=> ('RED', <Color.RED: 1>)
#=> ('GREEN', <Color.GREEN: 2>)
#=> ('ALIAS_OF_RED', <Color.RED: 1>)

Enum成员可以使用is(身份运算符)或is not进行比较。==或!=(相等运算符)的作用相同:

a = Color.RED

a is Color.RED
#=> True

a == Color.RED
#=> True

要分配整数值,auto()函数从1开始,并自动设置后续值。

class Shape(Enum):
    CIRCLE = auto()
    SQUARE = auto()
    OVAL = auto()

要禁止别名(防止不同名称具有重复值),可以使用类装饰器@enum.unique装饰器。

@enum.unique
class Shape(Enum):
    CIRCLE = 1
    SQUARE = 2
    TRIANGLE = 1
#=> ValueError: duplicate values found in <enum 'Shape'>: TRIANGLE -> CIRCLE

要使用给定值访问enum成员,可以使用这样的写法:<EnumName>(<value>)。

g = Color(2)

g is Color.GREEN
#=> True

g
#=> <Color.GREEN: 2>

通过使用任意混入类或数据类型对Enum类进行子类化,可以编写自定义的受限Enum。例如:

class StrEnum(str, Enum):
    pass

仅当enum不定义任何成员时,才允许对Enum进行子类化。 更多细节和说明请参见enum操作指南和enum食谱。

通过 GitHub 编辑 该链接会在新窗口或标签页中打开