python 枚举(enum)

Python 中的枚举是指将一组具有名称的常量定义为一个枚举类型,并限制变量只能取枚举类型中的值。Python 3.4 版本之后,引入了 enum 模块来支持枚举类型。

使用枚举有以下优点:

  1. 枚举类不允许定义相同枚举名称,但不同的枚举名称可以有相同的值,后者相当于前者的别名。

  2. 枚举值不能被修改,枚举值一旦被修改,就会引发AttributeError异常。

  3. 两个不同的枚举类,枚举名称和枚举值即便相同,在比较时也是不相等的。

  4. 枚举类的一个枚举有name(标签)和value(枚举值)两个属性,使用枚举值时,务必通过value获取枚举值。

枚举应用场景

枚举使用与枚举值比较

下面是一个简单的示例代码,演示如何使用 enum 定义一个枚举类型:

import enum

# 定义一个枚举类型,标识颜色
class Color(enum.Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# 使用枚举类型
print(Color.RED)   # 输出:Color.RED
print(Color.GREEN) # 输出:Color.GREEN
print(Color.BLUE)  # 输出:Color.BLUE

# 枚举类型还可以用于比较操作
print(Color.RED == Color.GREEN) # 输出:False
print(Color.RED == Color.RED)   # 输出:True

在上面的代码中,我们首先定义了一个枚举类型 Color,包含三个常量:REDGREENBLUE。然后我们分别使用枚举类型输出了这三种颜色,并演示了如何进行比较操作。

枚举值取值

另外,还可以使用枚举类型的方法 namevalue 分别获取枚举常量的名称和值:

枚举类的一个枚举有name(标签)和value(枚举值)两个属性,使用枚举值时,务必通过value获取枚举值。

# 使用枚举类型的方法获取常量名称和值
print(Color.RED.name)   # 输出:RED
print(Color.RED.value)  # 输出:1

枚举值遍历

# 自定义枚举类型的值
class Fruit(enum.Enum):
    APPLE = 1
    BANANA = 2
    ORANGE = 3
    GRAPE = 'grape'

# 输出枚举类型中每个常量的名称和值
for fruit in Fruit:
    print(f"{fruit.name}: {fruit.value}")

# 输出
APPLE: 1
BANANA: 2
ORANGE: 3
GRAPE: grape

Process finished with exit code 0

在上面的代码中,我们定义了一个枚举类型 Fruit,其中 GRAPE 的值为字符串 'grape'。演示了如何遍历枚举类型中每个常量,并输出它的名称和值。

总之,Python 中的枚举可以用于更好地组织程序代码,提高代码可读性和可维护性,并降低参数传递错误的风险。

使用for循环可以对枚举值进行遍历,枚举有name和value两个属性,name就是枚举类的类属性,value则是类属性的值。

枚举值唯一

枚举值理论上是允许重复的,如果不希望出现枚举值重复的情况,可以使用enum模块提供的unique装饰器

import enum
from enum import unique

@unique
class ColorCode(enum.Enum):
    RED = 1
    BLUE = 1
    BLACK = 3

如果枚举值出现了重复的情况,由于有unique装饰器修饰,在执行时会报错。