Python 枚举类型语法
在实际开发中,有些变量只有几种可能的取值。比如人的性别只有 2 种值:'男' 和 '女',而星期几只有 7 种值:1、2、3、4、5、6、7。
在 Python 中,我们可以使用 enum 模块的 Enum 类或 IntEnum 类来实现枚举类型,从而使得可以限制该变量在某个范围内取值。
语法:
from enum import Enum
class 类名 (Enum):
成员名1 = 值1
成员名2 = 值2
……
成员名n = 值n说明:
Python 中的枚举本质上是一个类,需要先从 enum 模块导入该类,然后再使用继承的方式来自定义一个枚举类。
对于枚举类型,小伙伴们需要清楚以下 3 点。
- 由于枚举都是用来代表常量,因此枚举成员名应该采用纯大写。
- 如果是继承 Enum 类,则枚举值可以是整型或字符串。如果是继承 IntEnum 类,则枚举值只能是整型。
- 枚举成员有 2 个属性:name 和 value。name 属性用于获取成员名,而 value 属性用于获取成员值。
Python 枚举类型示例
接下来,我们通过几个简单的例子来讲解 Python 中的枚举类型是如何使用的。
示例 1:枚举类型的基本用法
from enum import Enum
# 定义枚举类
class Gender(Enum):
MALE = 0
FEMALE = 1
# 打印枚举类型
print(Gender.MALE)
print(Gender.FEMALE)
# 打印枚举名
print(Gender.MALE.name)
print(Gender.FEMALE.name)
# 打印枚举值
print(Gender.MALE.value)
print(Gender.FEMALE.value)运行结果如下。
Gender.MALE
Gender.FEMALE
MALE
FEMALE
0
1分析:
直接打印枚举类型(如 print(Gender.MALE)),得到的是一个枚举类型。如果想要获取枚举名,需要使用 name 属性;如果想要获取枚举值,需要使用 value 属性。
下面再多举几个枚举类,以便小伙伴们更好地了解 Python 枚举类型是如何定义的。
# 星期几
from enum import Enum
class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
# RGB 三原色
from enum import Enum
class Color(Enum):
RED = 'red'
GREEN = 'green'
BLUE = 'blue'示例 2:枚举的别名
from enum import Enum
# 定义枚举类
class Gender(Enum):
MALE = 0
FEMALE = 1
MALE_ALIAS = 0
print(Gender.MALE)
print(Gender.MALE_ALIAS)
print(Gender.MALE.name)
print(Gender.MALE_ALIAS.name)
print(Gender.MALE.value)
print(Gender.MALE_ALIAS.value)运行结果如下。
Gender.MALE
Gender.MALE
MALE
MALE
0
0分析:
在定义枚举类型时,如果两个枚举名不同但枚举值相同,那么后者是前者的别名。
注意: 如果有多个成员的值相同,那么第二个成员会被当做第一个成员的别名。然后使用 for 循环遍历枚举时,这些别名是不会被打印出来的,只会打印真正的那个成员。
示例 3:遍历枚举
from enum import Enum
# 定义枚举类
class Gender(Enum):
MALE = 0
FEMALE = 1
# 遍历枚举
for member in Gender.__members__:
print(member)运行结果如下。
MALE
FEMALE分析:
如果想要遍历枚举,可以使用 “for 循环” 结合 “__members__属性” 来实现。
提示: 更多关于 Python 枚举类型的信息,请参考官方文档:Enum HOWTO。
