本文转自(http://www.cnblogs.com/ucos/p/5896861.html)
1.枚举的定义
1.首先枚举要导入enum模块,实现代码:from Enum import enum
2.枚举定义用class关键字,继承Enum类
3.用于定义枚举的class和定义类的class是有区别
代码示例:
from Enum import enum
class Color (Enum):
red=1
orange=2
yellow=3
green=4
blue=5
indigo=6
purple=7
代码分析:
1.上面的代码,我们定义了颜色的枚举Color
2.颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等
3.每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1
4.每个成员的数据类型就是它所属的枚举
2.枚举常见问题
2.1 定义枚举时,成员名称不允许重复
from Enum import enum
class Color(Enum):
red=1
red=2
上述代码会出现错误,无法执行。提示错误:TypeError: Attempted to reuse key: ‘red’
2.2 默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名
from Enum import enum
class Color(Enum):
red=1
red_alias=1
成员Color.red和Color.red_alias具有相同的值,那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。
2.3 如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
from enum import Enum
class Color(Enum):
red = 1
red_alias = 1
print(Color(1))
输出结果为:Color.red
2.4 如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
from enum import Enum, unique
@unique
class Color(Enum):
red = 1
red_alias = 1
再执行就会提示错误:ValueError: duplicate values found in
enum ‘Color’: red_alias -> red
3.枚举取值
3.1 通过成员的名称来获取成员
Color['red']
3.2 通过成员值来获取成员
Color(2)
3.3 通过成员,来获取它的名称和值
red_member = Color.red
red_member.name
red_member.value
4.迭代器
4.1 枚举支持迭代器,可以遍历枚举成员
for color in Color:
print(color)
输出结果是,枚举的所有成员:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。
4.2 如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员
from enum import Enum
class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
blue = 5
indigo = 6
purple = 7
red_alias = 1
for color in Color:
print(color)
输出结果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias并没有出现在输出结果中。
4.3 如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性_members_
from enum import Enum
class Color(Enum):
red = 1
orange = 2
yellow = 3
green = 4
blue = 5
indigo = 6
purple = 7
red_alias = 1
for color in Color.__members__.items():
print(color)
输出结果:
以上就是关于python中枚举的使用方法,欢迎大家一起分享哦