有勇气的牛排博客
☰

Python枚举 Enum 详细分析与举例

默认 1571 Python 2024-10-26 12:06:06

知止自律打卡-微信小程序APP
一款微信自律打卡小程序,支持自定义打卡项目、习惯记录、项目日记、专注计时与数据统计。自律打卡、学习打卡、读书打卡、健身打卡、运动打卡、减肥打卡、戒色打卡、养生打卡、戒烟、戒酒、戒熬夜等多种场景。万能打卡模板自由创建。可自定义每日打卡目标,记录习惯连续天数,可视化追踪成长进度。
了解产品详情 →
微信搜索「知止自律打卡」
知止自律打卡微信小程序

1 前言

1.1 定义

**Python 枚举(Enum)**是一种用于创建具名常量的类,能够使代码更具有可读性和维护性。

通过使用枚举,可以避免魔法值(magic numbers),并为常量提供更明确的意义。

1.2 知识点分类

2 创建枚举类

from enum import Enum

class Color(Enum):
    Red = 1
    Green = 2
    BLUE = 3

枚举成员:

3 访问枚举成员

3.1 通过名称访问

print(Color.Red)  # 输出 Color.Red

3.2 通过值访问

print(Color(1))  # 输出 Color.Red

3.3 不存在异常

print(Color(6))  

如果值不存在 引发 ValueError 异常

Python Enum 枚举 不存在异常

4 获取枚举成员的属性

每个枚举成员都有两个重要的属性:

#  获取枚举成员的属性
print(Color.Red.name, Color.Red.value)

Python Enum 枚举 获取枚举成员的属性

5 遍历枚举

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

Python Enum 枚举 遍历枚举

6 比较枚举成员

枚举成员可以使用 == 和 is 进行比较。

6.1 使用 ==

# 比较枚举成员
if Color.Red == Color(1):
    print("相等")

Python Enum 枚举 比较枚举成员

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

Python Enum 枚举 使用自动值

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])

Python Enum 枚举 哈希支持

标签:

×
×