Python枚举 Enum 详细分析与举例
知止自律打卡-微信小程序APP
一款微信自律打卡小程序,支持自定义打卡项目、习惯记录、项目日记、专注计时与数据统计。自律打卡、学习打卡、读书打卡、健身打卡、运动打卡、减肥打卡、戒色打卡、养生打卡、戒烟、戒酒、戒熬夜等多种场景。万能打卡模板自由创建。可自定义每日打卡目标,记录习惯连续天数,可视化追踪成长进度。
了解产品详情 →
微信搜索「知止自律打卡」
1 前言
1.1 定义
**Python 枚举(Enum)**是一种用于创建具名常量的类,能够使代码更具有可读性和维护性。
通过使用枚举,可以避免魔法值(magic numbers),并为常量提供更明确的意义。
1.2 知识点分类
- Python 标准库 → 数据类型扩展
- 面向对象编程 → 枚举类(enum.Enum)
2 创建枚举类
from enum import Enum
class Color(Enum):
Red = 1
Green = 2
BLUE = 3
枚举成员:
- 名称name:成员的名称,如
RED。 - 值value:与成员对应的值,如
1。
3 访问枚举成员
3.1 通过名称访问
print(Color.Red) # 输出 Color.Red
3.2 通过值访问
print(Color(1)) # 输出 Color.Red
3.3 不存在异常
print(Color(6))
如果值不存在 引发 ValueError 异常

4 获取枚举成员的属性
每个枚举成员都有两个重要的属性:
- name
- value
# 获取枚举成员的属性
print(Color.Red.name, Color.Red.value)

5 遍历枚举
# 遍历枚举
for color in Color:
print(color)

6 比较枚举成员
枚举成员可以使用 == 和 is 进行比较。
6.1 使用 ==
# 比较枚举成员
if Color.Red == Color(1):
print("相等")

6.2 使用 is
if Color.RED is Color.RED:
print("同一实例") # 输出: 同一实例
7 自定义枚举类
from enum import Enum
class Status(Enum):
SUCCESS = 1
ERROR = 2
def is_success(self):
return self == Status.SUCCESS
# 使用自定义方法
status = Status.SUCCESS
print(status.is_success()) # 输出 True
8 使用自动值
使用 auto() 可以自动为枚举成员分配值,这样就不需要手动设置每个值了。
from enum import auto, Enum
class Fruit(Enum):
APPLE = auto()
BANANA = auto()
ORANGE = auto()
print(Fruit.APPLE.value) # 输出: 1
print(Fruit.BANANA.value) # 输出: 2

9 使用 IntEnum 和 StrEnum
如果需要一个整数或字符串类型的枚举,可以使用IntEnum或StrEnum。
9.1 IntEnum
IntEnum 允许使用整数进行比较,并将枚举成员视为整数。
from enum import IntEnum
class HTTPStatus(IntEnum):
SUCCESS = 200
NOT_FOUND = 404
print(HTTPStatus.SUCCESS) # 输出: HTTPStatus.OK
print(HTTPStatus.SUCCESS.value) # 输出: 200
9.2 StrEnum
StrEnum 类是在 Python 3.11 中引入
9.2.1 Python 3.11 版本
from enum import StrEnum
class LogLevel(StrEnum):
DEBUG = "DEBUG"
INFO = "INFO"
WARNING = "WARNING"
ERROR = "ERROR"
print(LogLevel.DEBUG) # 输出: LogLevel.DEBUG
print(LogLevel.DEBUG.value) # 输出: DEBUG
9.2.2 低于Python 3.11 版本
低于Python 3.11方案
from enum import Enum
class StrEnum(str, Enum):
# 继承 str 和 Enum 来创建一个字符串枚举类。
pass
class LogLevel(StrEnum):
DEBUG = "DEBUG"
INFO = "INFO"
WARNING = "WARNING"
ERROR = "ERROR"
print(LogLevel.DEBUG) # 输出: LogLevel.DEBUG
print(LogLevel.DEBUG.value) # 输出: DEBUG
10 其他特性
哈希支持:枚举成员可以用于字典的键,因为它们是可哈希的。
from enum import Enum
class Color(Enum):
Red = 1
Green = 2
Blue = 3
# 哈希支持
color_dict = {
Color.Red: "红色",
Color.Green: "绿色",
Color.Blue: "蓝色",
}
print(color_dict)
print(color_dict[Color.Red])

标签: