Python中枚举的使用

前言

在 Python 中,枚举(Enum)是一种数据类型,它允许你定义一组命名的常量。

枚举在需要表示一组固定选项的场景中非常有用,比如 days of the week、status codes 等。

Python 的标准库提供了 enum 模块,其中包含几种不同的枚举类型,最常用的是 EnumIntEnum

使用 Enum

首先,你需要导入 enum 模块:

1
from enum import Enum

数字枚举

1
2
3
4
5
6
7
8
class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7

Weekday 是一个枚举类,其中定义了七个枚举成员,分别代表一周中的每一天,每个成员都有一个唯一的整数值。

字符串枚举

1
2
3
4
class Color(Enum):
RED = "red"
GREEN = "green"
BLUE = "blue"

访问枚举成员

名称与值

  • 访问名称:Weekday.MONDAY.name -> “MONDAY”

  • 访问值:Weekday.MONDAY.value -> 1

你可以通过枚举类名和成员名来访问枚举成员:

1
2
print(Weekday.MONDAY)  # 输出: Weekday.MONDAY
print(Weekday.MONDAY.value) # 输出: 1

你也可以通过值来获取枚举成员:

1
print(Weekday(1))  # 输出: Weekday.MONDAY

遍历枚举成员

你可以使用 Enum 类的 __members__ 属性来遍历所有的枚举成员:

1
2
for day in Weekday:
print(day)

输出:

1
2
3
4
5
6
7
Weekday.MONDAY
Weekday.TUESDAY
Weekday.WEDNESDAY
Weekday.THURSDAY
Weekday.FRIDAY
Weekday.SATURDAY
Weekday.SUNDAY

比较枚举成员

枚举成员是单例实例,因此你可以使用 == 进行比较:

1
2
3
4
if Weekday.MONDAY == Weekday(1):
print("True")
else:
print("False")

输出:

1
True

自定义枚举方法

你可以在枚举类中定义方法:

1
2
3
4
5
6
7
8
9
10
11
12
class Planet(Enum):
MERCURY = (1, "small")
VENUS = (2, "hot")
EARTH = (3, "habitable")
MARS = (4, "red")

def __init__(self, number, description):
self.number = number
self.description = description

def get_description(self):
return self.description

然后,你可以使用这些方法:

1
print(Planet.EARTH.get_description())  # 输出: habitable

使用 IntEnum

如果你需要一个枚举类,其成员是整数,并且可以与整数进行比较,可以使用 IntEnum

1
2
3
4
5
6
7
8
9
10
from enum import IntEnum

class Weekday(IntEnum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7

IntEnum 允许与整数进行比较:

1
print(Weekday.MONDAY == 1)  # 输出: True

什么是 IntEnum,它与 Enum 有什么不同?

答案

  • IntEnumEnum 的子类,其成员是整数类型。

  • IntEnum 允许与整数进行比较和运算,而 Enum 不行。