第九天:
Enumeration class
课程知识点速览
一、为什么要使用枚举(Enum)
普通常量的缺陷:普通常量(如
JAN = 1)存在类型过松、散落无归属语义、容易被误修改等缺陷。枚举的特性:
类型清晰:具有明确的类类型与语法语义。
不可修改:定义后对成员重新赋值会直接报错。
单例且不可实例化:所有成员均为全局单例(Singleton),无法通过
Month()创造新实例。可迭代:支持通过
for循环遍历成员。
二、Enum 基本用法
继承定义:继承
enum.Enum类。关键属性:
.name:获取成员名称(字符串)。.value:获取成员对应的值(任意类型)。
遍历与映射:
使用
for m in Color:顺序遍历所有主成员。使用
Color.__members__获取包含别名的完整映射(有序字典)。
函数式创建:
Enum('Month', ('Jan', 'Feb', ...)),适合快捷按名称生成(默认从 1 开始自动分配值)。
三、高级特性
@unique装饰器:Enum 默认允许不同成员值相同(后者会成为前者的别名)。使用@unique装饰器可强制成员的值必须唯一,出现重复值时抛出ValueError。auto()自动分配值:使用auto()可自动生成递增数值(默认从 1 开始)。灵活的值类型:枚举值不限于整数,可以是字符串、元组、字典等任意对象。
四、比较规则与特殊类型
比较规则:支持身份比较(
is)与相等比较(==),但默认不支持大小比较(</>)。IntEnum(数值枚举):继承IntEnum的成员既是枚举也是int,支持直接与整数进行比较及数值运算。
评论