有勇气的牛排博客

Python枚举 详细分析与举例

有勇气的牛排 550 Python 2024-10-26 12:06:06

1 前言

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

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

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 异常

image.png

4 获取枚举成员的属性

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

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

image.png

5 遍历枚举

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

image.png

6 比较枚举成员

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

6.1 使用 ==

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

image.png

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

image.png

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

image.png


留言

导演 2024-12-07 12:45:09
1
专栏
文章
加入群聊