📜  python中枚举的内容(1)

📅  最后修改于: 2023-12-03 14:46:32.750000             🧑  作者: Mango

Python中枚举

在Python中,枚举是一种数据类型,也常常被称为枚举类或枚举类型。枚举类型可以定义一系列有限的取值范围。枚举类中包含的每个取值称为枚举项,每个枚举项有一个唯一标识符。

Python中的枚举实现是基于一个叫做Enum的类。通过Enum类,我们可以很容易地定义一个枚举类型。例如:

from enum import Enum

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

在上面的代码中,我们创建了一个名为Color的枚举类型,并定义了三个枚举项:REDGREENBLUE

枚举项

在枚举类中,枚举项是用类变量来定义的。枚举项总是由大写字母组成,并且可以包含下划线。

每个枚举项都是一个枚举对象的实例,它们具有以下属性:

  • name:枚举项的名称。
  • value:枚举项对应的值。

例如,在上面的代码中,Color.REDColor.GREENColor.BLUE都是枚举项的实例。

print(Color.RED.name)          # RED
print(Color.RED.value)         # 1
枚举比较

枚举项可以通过 == 进行比较,但不能与其他类型进行比较。

red = Color.RED
blue = Color.BLUE

if red == blue:
    print("This should not happen!")
else:
    print("red and blue are not the same.")

# Output: red and blue are not the same.
迭代枚举

枚举类型是可迭代的,它们支持通常用于迭代的所有操作。

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    
for color in Color:
    print(color)

# Output:
# Color.RED
# Color.GREEN
# Color.BLUE
将枚举作为字典键

由于枚举项在枚举类型中都是唯一的,它们可以被用作字典键。

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    
my_colors = {}
my_colors[Color.RED] = "#FF0000"
my_colors[Color.GREEN] = "#00FF00"
my_colors[Color.BLUE] = "#0000FF"

print(my_colors[Color.RED])    # #FF0000
print(my_colors[Color.GREEN])  # #00FF00
print(my_colors[Color.BLUE])   # #0000FF
自定义枚举项值

枚举项的值可以是任何类型,包括字符串、数字等。

class Day(Enum):
    MONDAY = ('Mon', 1)
    TUESDAY = ('Tue', 2)
    WEDNESDAY = ('Wed', 3)

    def __init__(self, full_name, num):
        self.full_name = full_name
        self.num = num

print(Day.MONDAY.full_name)    # Mon
print(Day.MONDAY.num)          # 1
枚举的成员

枚举类有两个成员:__members__ 属性和 __getitem__() 方法。__members__ 属性是一个包含所有枚举项的字典,可以通过枚举项的名称访问相应的枚举项。

__getitem__() 方法可以用枚举项的名称或值来获取枚举项。

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
    
print(Color.__members__['RED'])              # Color.RED
print(Color.__getitem__('RED'))              # Color.RED
print(Color.__getitem__(1))                  # Color.RED
枚举的自动编号

枚举的成员默认都有一个自动编号,在默认情况下,第一个枚举成员的自动编号为0,每个枚举成员的自动编号都比前一个成员的编号大1。

可以通过在枚举定义中设置第一个枚举成员的值来自定义自动编号的起始值。

from enum import Enum, auto

class Color(Enum):
    RED = auto()
    GREEN = auto()
    BLUE = auto()

print(Color.RED.value)                  # 1
print(Color.GREEN.value)                # 2
print(Color.BLUE.value)                 # 3