1.枚举的定义
首先,定义枚举要导入enum模块。 枚举定义用class关键字,继承Enum类。 用于定义枚举的class和定义类的class是有区别【下一篇博文继续分享】。示例代码:
fromenumimportEnum classColor(Enum): red=1 orange=2 yellow=3 green=4 blue=5 indigo=6 purple=7代码分析:
上面的代码,我们定义了颜色的枚举Color.
颜色枚举有7个成员,分别是Color.red、Color.orange、Color.yellow等。
每一个成员都有它们各自名称和值,Color.red成员的名称是:red,值是:1。
每个成员的数据类型就是它所属的枚举。【*注:用class定义的类,实际上就是一种类型】
1.1定义枚举时,成员名称不允许重复
fromenumimportEnum
classColor(Enum): red=1 red=2
上面的代码,就无法执行。提示错误:TypeError:Attemptedtoreusekey:red
1.2默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名****
fromenumimportEnum classColor(Enum): red=1 red_alias=1成员Color.red和Color.red_alias具有相同的值,那么成员Color.red_alias的名称red_alias就被视作成员Color.red名称red的别名。
1.3如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
fromenumimportEnum classColor(Enum): red=1 red_alias=1 print(Color(1))输出结果为:Color.red
1.4如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
fromenumimportEnum,unique @unique classColor(Enum): red=1 red_alias=1再执行就会提示错误:ValueError:duplicatevaluesfoundin<enumColor>:red_alias->red
2.枚举取值
**2.1通过成员的名称来获取成员**
Color[red]2.2通过成员值来获取成员
Color(2)**2.3通过成员,来获取它的名称和值**
red_member=Color.red red_member.name red_member.value3.迭代器
**3.1枚举支持迭代器,可以遍历枚举成员**
forcolorinColor: print(color)输出结果是,枚举的所有成员。Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。
**3.2如果枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员
fromenumimportEnum classColor(Enum): red=1 orange=2 yellow=3 green=4 blue=5 indigo=6 purple=7 red_alias=1 forcolorinColor: print(color)输出结果是:Color.red、Color.orange、Color.yellow、Color.green、Color.blue、Color.indigo、Color.purple。但是Color.red_alias并没有出现在输出结果中。
3.3如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
fromenumimportEnum classColor(Enum): red=1 orange=2 yellow=3 green=4 blue=5 indigo=6 purple=7 red_alias=1 forcolorinColor.__members__.items(): print(color)输出结果:(red,<Color.red:1>)、(orange,<Color.orange:2>)、(yellow,<Color.yellow:3>)、(green,<Color.green:4>)、(blue,<Color.blue:5>)、
*(indigo,<Color.indigo:6>)、(purple,<Color.purple:7>)、**(red_alias,<Color.red:1>)*
4.枚举比较
**4.1枚举成员可进行同一性比较**
Color.redisColor.red输出结果是:True
Color.redisnotColor.blue输出结果是:True
4.2枚举成员可进等值比较
Color.blue==Color.red输出结果是:False
Color.blue!=Color.red输出结果是:True
4.3枚举成员不能进行大小比较
Color.red<Color.blue输出结果出错:TypeError:unorderabletypes:Color()<Color()
本文内容总结:
原文链接:https://www.cnblogs.com/ucos/p/5896861.html