python中的枚举类
一些具有特殊含义的类其实例化对象的个数往往是固定的比如用一个类表示月份则该类的实例对象最多有 12 个再比如用一个类表示季节则该类的实例化对象最多有 4 个。针对这种特殊的类Python 3.4 中新增加了 Enum 枚举类。也就是说对于这些实例化对象个数固定的类可以用枚举类来定义。例如下面程序演示了如何定义一个枚举类from enum import Enumclass Color(Enum):# 为序列值指定value值red 1green 2blue 3如果想将一个类定义为枚举类只需要令其继承自 enum 模块中的 Enum 类即可。例如在上面程序中Color 类继承自 Enum 类则证明这是一个枚举类。在 Color 枚举类中red、green、blue 都是该类的成员可以理解为是类变量。注意枚举类的每个成员都由 2 部分组成分别为 name 和 value其中 name 属性值为该枚举值的变量名如 redvalue 代表该枚举值的序号序号通常从 1 开始。和普通类的用法不同枚举类不能用来实例化对象但这并不妨碍我们访问枚举类中的成员。访问枚举类成员的方式有多种例如以 Color 枚举类为例在其基础上添加如下代码#调用枚举成员的 3 种方式print(Color.red)print(Color[red])print(Color(1))#调取枚举成员中的 value 和 nameprint(Color.red.value)print(Color.red.name)#遍历枚举类中所有成员的 2 种方式for color in Color:print(color)程序输出结果为Color.redColor.redColor.red1redColor.redColor.greenColor.blue枚举类成员之间不能比较大小但可以用 或者 is 进行比较是否相等例如print(Color.red Color.green)print(Color.red.name is Color.green.name)输出结果为FlaseFlase需要注意的是枚举类中各个成员的值不能在类的外部做任何修改也就是说下面语法的做法是错误的Color.red 4除此之外该枚举类还提供了一个 __members__ 属性该属性是一个包含枚举类中所有成员的字典通过遍历该属性也可以访问枚举类中的各个成员。例如for name,member in Color.__members__.items():print(name,-,member)输出结果为red - Color.redgreen - Color.greenblue - Color.blue值得一提的是Python 枚举类中各个成员必须保证name 互不相同但 value 可以相同举个例子from enum import Enumclass Color(Enum):# 为序列值指定value值red 1green 1blue 3print(Color[green])输出结果为Color.red可以看到Color 枚举类中 red 和 green 具有相同的值都是 1Python 允许这种情况的发生它会将green 当做是 red 的别名因此当访问 green 成员时最终输出的是 red。在实际编程过程中如果想避免发生这种情况可以借助 unique 装饰器这样当枚举类中出现相同值的成员时程序会报 ValueError 错误。例如#引入 uniquefrom enum import Enum,unique#添加 unique 装饰器uniqueclass Color(Enum):# 为序列值指定value值red 1green 1blue 3print(Color[green])运行程序会报错Traceback (most recent call last):File D:\python3.6\demo.py, line 3, in moduleclass Color(Enum):File D:\python3.6\lib\enum.py, line 834, in unique(enumeration, alias_details))ValueError: duplicate values found in enum Color: green - red除了通过继承 Enum 类的方法创建枚举类还可以使用 Enum() 函数创建枚举类。例如from enum import Enum#创建一个枚举类Color Enum(Color,(red,green,blue))#调用枚举成员的 3 种方式print(Color.red)print(Color[red])print(Color(1))#调取枚举成员中的 value 和 nameprint(Color.red.value)print(Color.red.name)#遍历枚举类中所有成员的 2 种方式for color in Color:print(color)Enum() 函数可接受 2 个参数第一个用于指定枚举类的类名第二个参数用于指定枚举类中的多个成员。如上所示仅通过一行代码即创建了一个和前面的 Color 类相同的枚举类。运行程序其输出结果为Color.redColor.redColor.red1redColor.redColor.greenColor.blue
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2462130.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!