少女祈祷中...
min blog

python学习第九天日记

第九天:

Enumeration class

课程知识点速览

一、为什么要使用枚举(Enum)

  1. 普通常量的缺陷:普通常量(如 JAN = 1)存在类型过松、散落无归属语义、容易被误修改等缺陷。

  2. 枚举的特性

    • 类型清晰:具有明确的类类型与语法语义。

    • 不可修改:定义后对成员重新赋值会直接报错。

    • 单例且不可实例化:所有成员均为全局单例(Singleton),无法通过 Month() 创造新实例。

    • 可迭代:支持通过 for 循环遍历成员。

二、Enum 基本用法

  1. 继承定义:继承 enum.Enum 类。

  2. 关键属性

    • .name:获取成员名称(字符串)。

    • .value:获取成员对应的值(任意类型)。

  3. 遍历与映射

    • 使用 for m in Color: 顺序遍历所有主成员。

    • 使用 Color.__members__ 获取包含别名的完整映射(有序字典)。

  4. 函数式创建Enum('Month', ('Jan', 'Feb', ...)),适合快捷按名称生成(默认从 1 开始自动分配值)。

三、高级特性

  1. @unique 装饰器:Enum 默认允许不同成员值相同(后者会成为前者的别名)。使用 @unique 装饰器可强制成员的值必须唯一,出现重复值时抛出 ValueError

  2. auto() 自动分配值:使用 auto() 可自动生成递增数值(默认从 1 开始)。

  3. 灵活的值类型:枚举值不限于整数,可以是字符串、元组、字典等任意对象。

四、比较规则与特殊类型

  1. 比较规则:支持身份比较(is)与相等比较(==),但默认不支持大小比较(< / >)。

  2. IntEnum(数值枚举):继承 IntEnum 的成员既是枚举也是 int,支持直接与整数进行比较及数值运算。

评论