前言
在 Python 中,枚举(Enum)是一种数据类型,它允许你定义一组命名的常量。
枚举在需要表示一组固定选项的场景中非常有用,比如 days of the week、status codes 等。
Python 的标准库提供了 enum 模块,其中包含几种不同的枚举类型,最常用的是 Enum 和 IntEnum。
使用 Enum
首先,你需要导入 enum 模块:
1  | from enum import Enum  | 
数字枚举
1  | class Weekday(Enum):  | 
Weekday 是一个枚举类,其中定义了七个枚举成员,分别代表一周中的每一天,每个成员都有一个唯一的整数值。
字符串枚举
1  | class Color(Enum):  | 
访问枚举成员
名称与值
访问名称:
Weekday.MONDAY.name-> “MONDAY”访问值:
Weekday.MONDAY.value-> 1
你可以通过枚举类名和成员名来访问枚举成员:
1  | print(Weekday.MONDAY) # 输出: Weekday.MONDAY  | 
你也可以通过值来获取枚举成员:
1  | print(Weekday(1)) # 输出: Weekday.MONDAY  | 
遍历枚举成员
你可以使用 Enum 类的 __members__ 属性来遍历所有的枚举成员:
1  | for day in Weekday:  | 
输出:
1  | Weekday.MONDAY  | 
比较枚举成员
枚举成员是单例实例,因此你可以使用 == 进行比较:
1  | if Weekday.MONDAY == Weekday(1):  | 
输出:
1  | True  | 
自定义枚举方法
你可以在枚举类中定义方法:
1  | class Planet(Enum):  | 
然后,你可以使用这些方法:
1  | print(Planet.EARTH.get_description()) # 输出: habitable  | 
使用 IntEnum
如果你需要一个枚举类,其成员是整数,并且可以与整数进行比较,可以使用 IntEnum:
1  | from enum import IntEnum  | 
IntEnum 允许与整数进行比较:
1  | print(Weekday.MONDAY == 1) # 输出: True  | 
什么是 IntEnum,它与 Enum 有什么不同?
答案:
IntEnum是Enum的子类,其成员是整数类型。IntEnum允许与整数进行比较和运算,而Enum不行。