共计 1136 个字符,预计需要花费 3 分钟才能阅读完成。
在日常开发中,我们经常需要定义一些“固定值”,例如星期、状态码、方向等。这类值具有固定集合特征,用整数或字符串表示容易出错。Python 提供了 enum 模块来定义“枚举类型”,既能提高代码可读性,也能避免魔法数字的出现。
一、枚举的基本定义
使用 Enum 可以定义一组有名称的常量。例如:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
此时 Color.RED、Color.GREEN、Color.BLUE 分别是枚举成员,每个成员有名称和对应的值。
二、访问枚举成员
你可以通过多种方式访问枚举成员:
print(Color.RED) # Color.RED
print(Color.RED.name) # RED
print(Color.RED.value) # 1
也可以通过值获取对应的枚举成员:
print(Color(2)) # Color.GREEN
三、遍历枚举成员
Enum 类支持遍历操作,可以使用 for 循环查看所有成员:
for color in Color:
print(color.name, color.value)
输出结果:
RED 1
GREEN 2
BLUE 3
四、比较枚举成员
每个枚举成员是唯一的,不能直接用整数比较,但可以比较是否为同一个枚举:
if Color.RED == Color.RED:
print(" 相同 ")
不同类型或不同值的枚举返回 False。
五、枚举的自动赋值
可以使用 auto() 自动分配值:
from enum import Enum, auto
class Status(Enum):
SUCCESS = auto()
ERROR = auto()
UNKNOWN = auto()
系统会自动分配连续整数(从 1 开始)。
六、枚举的实用技巧
在工程中,枚举非常适合表示固定集合,如:
class Direction(Enum):
NORTH = 1
SOUTH = 2
EAST = 3
WEST = 4
结合控制语句可提高代码可读性:
def move(direction):
if direction == Direction.NORTH:
print(" 向北移动 ")
elif direction == Direction.SOUTH:
print(" 向南移动 ")
七、枚举与字典的结合
枚举值可用作字典键,方便映射:
actions = {
Direction.NORTH: "↑",
Direction.SOUTH: "↓",
Direction.EAST: "→",
Direction.WEST: "←"
}
print(actions[Direction.EAST]) # 输出 →
八、小结
枚举的好处在于:
- 避免使用“魔法数字”;
- 增强代码语义;
- 更容易维护与扩展。
枚举是 Python 中非常优雅的结构,尤其在状态管理、配置定义、接口通信中能发挥重要作用。