徐州市建设局网站首页,佛山做网站那家好,海外直邮购物网站,网站登录不上怎么回事一些具有特殊含义的类#xff0c;其实例化对象的个数往往是固定的#xff0c;比如用一个类表示月份#xff0c;则该类的实例对象最多有 12 个#xff1b;再比如用一个类表示季节#xff0c;则该类的实例化对象最多有 4 个。
针对这种特殊的类#xff0c;Python 3.4 中新…一些具有特殊含义的类其实例化对象的个数往往是固定的比如用一个类表示月份则该类的实例对象最多有 12 个再比如用一个类表示季节则该类的实例化对象最多有 4 个。
针对这种特殊的类Python 3.4 中新增加了 Enum 枚举类。也就是说对于这些实例化对象个数固定的类可以用枚举类来定义。
例如下面程序演示了如何定义一个枚举类
from enum import Enum
class 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 和 name
print(Color.red.value)
print(Color.red.name)
#遍历枚举类中所有成员的 2 种方式
for color in Color:print(color)
程序输出结果为
Color.red
Color.red
Color.red
1
red
Color.red
Color.green
Color.blue
枚举类成员之间不能比较大小但可以用 或者 is 进行比较是否相等例如
print(Color.red Color.green)
print(Color.red.name is Color.green.name)
输出结果为
Flase
Flase
需要注意的是枚举类中各个成员的值不能在类的外部做任何修改也就是说下面语法的做法是错误的
Color.red 4
除此之外该枚举类还提供了一个 __members__ 属性该属性是一个包含枚举类中所有成员的字典通过遍历该属性也可以访问枚举类中的各个成员。例如
for name,member in Color.__members__.items():print(name,-,member)
输出结果为
red - Color.red
green - Color.green
blue - Color.blue
值得一提的是Python 枚举类中各个成员必须保证 name 互不相同但 value 可以相同举个例子
from enum import Enum
class Color(Enum):# 为序列值指定value值red 1green 1blue 3
print(Color[green])
输出结果为
Color.red
可以看到Color 枚举类中 red 和 green 具有相同的值都是 1Python 允许这种情况的发生它会将 green 当做是 red 的别名因此当访问 green 成员时最终输出的是 red。
在实际编程过程中如果想避免发生这种情况可以借助 unique 装饰器这样当枚举类中出现相同值的成员时程序会报 ValueError 错误。例如
#引入 unique
from enum import Enum,unique
#添加 unique 装饰器
unique
class Color(Enum):# 为序列值指定value值red 1green 1blue 3
print(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 和 name
print(Color.red.value)
print(Color.red.name)
#遍历枚举类中所有成员的 2 种方式
for color in Color:print(color)
Enum() 函数可接受 2 个参数第一个用于指定枚举类的类名第二个参数用于指定枚举类中的多个成员。
如上所示仅通过一行代码即创建了一个和前面的 Color 类相同的枚举类。运行程序其输出结果为
Color.red
Color.red
Color.red
1
red
Color.red
Color.green
Color.blue
Python教程8天python从入门到精通学python看这套就够了