-
一些具有特殊含义的类,其实例化对象的个数需要是固定的,比如用一个类表示月份,则该类的实例对象最多有 12 个;再比如用一个类表示季节,则该类的实例化对象最多有 4 个
-
Python 3.4 中新增加了 Enum 枚举类。也就是说,对于这些实例化对象个数固定的类,可以用枚举类来定义
如何定义一个枚举类
from enum import Enum
class Color(Enum):
# 为序列值指定value值
red = 1
green = 2
blue = 3
1、在 Color 枚举类中,red、green、blue 都是该类的成员(可以理解为是类变量)
2、枚举类的每个成员都由 2 部分组成,分别为 name 和 value,其中 name 属性值为该枚举值的变量名(如 red),value 代表该枚举值的序号(序号通常从 1 开始)
和普通类不同,枚举类不能用来实例化对象,访问枚举类成员方式有多种
# 调用枚举成员的3种方式
print(Color.red) # Color.red
print(Color["red"]) # Color.red
print(Color(1)) # Color.red
#调取枚举成员中的value和name
print(Color.red.value) # 1
print(Color.red.name) # red
# 遍历枚举类中所有成员的方式
for color in Color:
print(color)
Color.red
Color.green
Color.blue
枚举类成员之间不能比较大小,但可以用 == 或者 is 进行比较是否相等
print(Color.red == Color.green) # False
print(Color.red.name is Color.green.name) # False
注意:枚举类中各个成员的值,不能在类的外部做任何修改
Python 枚举类中各个成员必须保证 name 互不相同,但 value 可以相同
from enum import Enum
class Color(Enum):
red = 1
green = 1 #green和red的值相同,会将green当作是red的别名,当访问 green 成员时,最终输出的是 red
blue = 2
print(Color.red)
在实际编程过程中,如果想避免发生这种情况,可以借助 @unique 装饰器,这样当枚举类中出现相同值的成员时,程序会报 ValueError 错误
from enum import Enum,unique
@unique
class Color(Enum):
red = 1
green = 1
blue = 2
print(Color.red)