枚举(Enumeration)是一种特殊的数据类型,用于定义一组命名的常量。Python 3.4+ 引入了 enum 模块来支持枚举类型。
1. 基础枚举定义
使用 Enum 类
from enum import Enumclass Color(Enum): RED = 1 GREEN = 2 BLUE = 3# 使用方式print(Color.RED) # Color.REDprint(Color.RED.name) # 'RED'print(Color.RED.value) # 1
使用 IntEnum(值必须是整数)
from enumimport IntEnumclass Status(IntEnum): PENDING = 0 RUNNING = 1 COMPLETED = 2 FAILED = -1
2. 使用 auto() 自动赋值
from enum import Enum, autoclass Priority(Enum): LOW = auto() # 自动赋值为 1 MEDIUM = auto() # 自动赋值为 2 HIGH = auto() # 自动赋值为 3
3. 字符串枚举
from enum import Enumclass HttpMethod(Enum): GET = 'GET' POST = 'POST' PUT = 'PUT' DELETE = 'DELETE' @classmethod def has_value(cls, value): return any(value == item.value for item in cls)
4. 带功能的枚举类
from enum import Enumclass Weekday(Enum): MONDAY = 1 TUESDAY = 2 WEDNESDAY = 3 THURSDAY = 4 FRIDAY = 5 SATURDAY = 6 SUNDAY = 7 def is_weekend(self): return self in [Weekday.SATURDAY, Weekday.SUNDAY] def next_day(self): # 获取下一天 days = list(Weekday) next_index = (days.index(self) + 1) % len(days) return days[next_index]# 使用day = Weekday.MONDAYprint(day.is_weekend()) # Falseprint(day.next_day()) # Weekday.TUESDAY
5. Flag 枚举(支持位运算)
from enum import Flag, autoclass Permission(Flag): READ = auto() # 1 WRITE = auto() # 2 EXECUTE = auto() # 4 ALL = READ | WRITE | EXECUTE # 7# 使用perms = Permission.READ | Permission.WRITEprint(perms) # Permission.READ|WRITEprint(Permission.READ in perms) # True
主要特点:
不可变性:枚举成员是常量,不能修改
类型安全:提供了更好的类型提示
可迭代:可以直接遍历所有成员
可比较:支持 is 和 == 比较
可序列化:支持 JSON 序列化等
选择哪种枚举类型取决于具体需求:基础数据用 Enum,需要整数特性用 IntEnum,需要位运算用 Flag。