枚举的定义
- 首先,定义枚举要导入enum模块。
- 枚举定义用class关键字,继承Enum类。
- 用于定义枚举的class和定义类的class是有区别
from enum import Enum,unique #如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】 #@unique class color(Enum): """ 对于一些既定的值 不允许随意赋值的量 每个成员的数据类型就是它所属的枚举 自定义的类/枚举 又叫自定义数据类型 """ red=1 red_y=1 orange=2 yellow=3 green=4 blue=5 purple=6
注意:
定义枚举时,成员名称不允许重复
默认情况下,不同的成员值允许相同。但是两个相同值的成员,第二个成员的名称被视作第一个成员的别名
如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员
如果要限制定义枚举时,不能定义相同值的成员。可以使用装饰器@unique【要导入unique模块】
根据枚举的值,获取枚举的名字
print(color(1))
print(color['orange'])
print(color['orange'].value)
/Users/liuqian/venv/learn/bin/python /Users/liuqian/PycharmProjects/learn/面向对象/枚举.py
color.red
color.orange
2
Process finished with exit code 0
创建 生成一个枚举类型co=color['purple']
print('枚举数据名字:',co.name)
print('枚举数据的值:',co.value)
/Users/liuqian/venv/learn/bin/python /Users/liuqian/PycharmProjects/learn/面向对象/枚举.py
枚举数据名字: purple
枚举数据的值: 6
Process finished with exit code 0
迭代器 枚举支持迭代器
如果枚举有值重复的成员,循环遍历枚举只获取值重复成员的第一个成员
for c in color:
print(c,end=' ')
print()
/Users/liuqian/venv/learn/bin/python /Users/liuqian/PycharmProjects/learn/面向对象/枚举.py
color.red color.orange color.yellow color.green color.blue color.purple
Process finished with exit code 0
如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__
for c in color.__members__.items():
print(c)
/Users/liuqian/venv/learn/bin/python /Users/liuqian/PycharmProjects/learn/面向对象/枚举.py
('red', <color.red: 1>)
('red_y', <color.red: 1>)
('orange', <color.orange: 2>)
('yellow', <color.yellow: 3>)
('green', <color.green: 4>)
('blue', <color.blue: 5>)
('purple', <color.purple: 6>)
Process finished with exit code 0
枚举比较 不能比较大小 只能比较相不相等print(color.red==color.red_y)
print(color.red!=color.red_y)
print(color.red is color.red_y)
print(color.red is color.blue)
print(color.red.value < color.blue.value)
print(type(color.red.value))
/Users/liuqian/venv/learn/bin/python /Users/liuqian/PycharmProjects/learn/面向对象/枚举.py
True
False
True
False
True
<class 'int'>
Process finished with exit code 0
#print(color.red < color.blue)
/Users/liuqian/venv/learn/bin/python /Users/liuqian/PycharmProjects/learn/面向对象/枚举.py
Traceback (most recent call last):
File "/Users/liuqian/PycharmProjects/learn/面向对象/枚举.py", line 50, in <module>
print(color.red < color.blue)
TypeError: '<' not supported between instances of 'color' and 'color'
Process finished with exit code 1