7.12. 枚举类¶
用常量和枚举类型来代替字面量的好处。
更易读:所有人都不需要记忆某个数字代表什么。
更健壮:降低输错数字或字母产生bug的可能性
7.12.1. 1. 枚举类使用¶
程序有两种方式来定义枚举类 1.直接使用Enum列出多个枚举值来创建枚举类。 2.通过继承Enum基类来派生枚举类。
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/5/18 8:19
# filename: 枚举类.py
"""
枚举是用来管理一组相关的有限个数常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。
python提供枚举类型,本质上是一种类
"""
"""
python中定义枚举类的语法如下:
class 枚举名(enum.Enum):
枚举常量列表
"""
import enum
class WeekDays(enum.Enum):
# 枚举常量列表
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 10
day = WeekDays.FRIDAY
print(day)
print(day.name)
print(day.value)
print(day.THURSDAY.name)
print(day.THURSDAY.value)
输出结果:
WeekDays.FRIDAY
FRIDAY
10
THURSDAY
4
value是返回枚举值,name是返回枚举名
常量的值可以是任何类型,多个成员的值也可以相同
7.12.2. 2.限制枚举类¶
限制常量只能为整数使用 enum.IntEnum
防止常量成员值重复,使用@enum.unique装饰器
import enum
@enum.unique
class WeekDays(enum.IntEnum):
# 枚举常量列表
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 10
day = WeekDays.FRIDAY
print(day)
print(day.name)
print(day.value)
print(day.THURSDAY.name)
print(day.THURSDAY.value)
输出结果
WeekDays.FRIDAY
FRIDAY
10
THURSDAY
4
7.12.3. 3. 枚举类示例¶
import enum
@enum.unique
class WeekDays(enum.IntEnum):
# 枚举常量列表
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 10
day = WeekDays.FRIDAY
if day == WeekDays.MONDAY:
print("努力工作吧,尽力不要让自己后悔,做个有钱人")
elif day == WeekDays.FRIDAY:
print("累了就休息一会儿,然后继续上路")
输出结果
累了就休息一会儿,然后继续上路
举例1¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/5/31 18:26
# filename: 枚举类2.py
import enum
class ORientation(enum.Enum):
# 为序列值指定value值
EAST = "东"
SOUTH = "南"
WEST = "西"
NORTH = "北"
def info(self):
print("这是一个代表【{0}】方向的枚举".format(self.value))
print(ORientation.SOUTH)
print(ORientation.SOUTH.value)
# 通过枚举变量访问枚举
print(ORientation['WEST'])
# 通过枚举值来访问枚举
print(ORientation('南'))
# 通过枚举的info()方法
ORientation.EAST.info()
# 遍历枚举的所有成员
for name, number in ORientation.__members__.items():
print(name, "===>", number, ",", number.value)
输出结果
ORientation.SOUTH
南
ORientation.WEST
ORientation.SOUTH
这是一个代表【东】方向的枚举
EAST ===> ORientation.EAST , 东
SOUTH ===> ORientation.SOUTH , 南
WEST ===> ORientation.WEST , 西
NORTH ===> ORientation.NORTH , 北
举例2¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/5/31 18:44
# filename: 枚举类3.py
import enum
class Man(enum.Enum):
MALE = "男", "帅气"
FEMALE = "女", "美丽"
def __init__(self, cn_name, desc):
self._cn_name = cn_name
self._desc = desc
@property
def desc(self):
return self._desc
@property
def cn_name(self):
return self._cn_name
#访问MALE的name
print("MALE的name:{}".format(Man.MALE.name))
#访问MALE的value
print("MALE的value:{}".format(Man.MALE.value))
#访问MALE自定义的cn_name属性
print("访问MALE自定义的cn_name属性:{}".format(Man.MALE.cn_name))
#访问MALE自定义的desc属性
print("访问MALE自定义的desc属性:{}".format(Man.MALE.desc))
输出信息
MALE的name:MALE
MALE的value:('男', '帅气')
访问MALE自定义的cn_name属性:男
访问MALE自定义的desc属性:帅气