enum模块定义了一个具备可迭代性和可比较性的枚举类型。 它可以为值创建具有良好定义的标识符,而不是直接使用字面上的字符串或者整数

1.创建枚举

from enum import Enum

class VIP(Enum):
   YELLOW = 1
   GREEN = 2
   BLANK = 3
   RED  = 4

>>> print(VIP.YELLOW)
VIP.YELLOW

2.枚举类和普通类比较

枚举类型是一个特殊的类:

枚举值不可变性

from enum import Enum
# 普通类
class Diamond():
    YELLOW = 1
    GREEN = 1
    BLANK = 3
    RED = 4

# 枚举类
class VIP(Enum):
    YELLOW = 1
    GREEN = 1
    BLANK = 3
    RED = 4
## 枚举值不可变性
>>> Diamond.GREEN = 2
>>> VIP.GREEN = 2
>>> print(Diamond.GREEN)
2
>>> print(VIP.GREEN)
'报错'

枚举类一旦赋值,枚举中的值将不能再被重新赋值

枚举标签不可重复

from enum import Enum
# 普通类
class Diamond():
    YELLOW = 1
    YELLOW = 2
    BLANK = 3
    RED = 4

# 枚举类
class VIP(Enum):
    YELLOW = 1
    YELLOW = 2
    BLANK = 3
    RED = 4

'枚举类,编译时就会报错'

3.枚举别名

from enum import Enum
# 普通类
class Diamond():
    YELLOW = 1
    GREEN = 1
    BLANK = 3
    RED = 4

# 枚举类
class VIP(Enum):
    YELLOW = 1
    GREEN = 1
    BLANK = 3
    RED = 4

## 枚举不允许有相同值
>>> print(Diamond.GREEN)
1
>>> print(VIP.GREEN)
VIP.YELLOW

当我们在枚举中定义了YELLOWGREEN赋值为相同值时,打印VIP.GREEN,普通类输出1,但是枚举类输出VIP.YELLOW,这是因为YELLOW赋值为1后,在对GREEN赋值为1,此时GREEN就不是一个变量,而是YELLOW的一个别名,表示相同的枚举类型

4.获取值、名称、类型

from enum import Enum
class VIP(Enum):
    YELLOW = 1
    GREEN = 1
    BLANK = 3
    RED = 4
# 获取值
>>> print(VIP.YELLOW.value)
1
# 获取名称
>>> print(VIP.YELLOW.name)
'YELLOW'
# 获取类型
>>> print(VIP.YELLOW)
VIP.YELLOW #这个是枚举类型

5.枚举遍历

from enum import Enum
class VIP(Enum):
    YELLOW = 1
    GREEN = 1
    BLANK = 3
    RED = 4

for v in VIP:
    print(v)

VIP.YELLOW
VIP.BLANK
VIP.RED

如果尝试遍历枚举类型,则后面重复的不会被打印出来。但是,如果想要获取别名,我们可以使用属性“members”,它是一个OrderedDict,包括所有定义的枚举名称,包括别名。

for v in VIP.__members__.items():
    print(v)

6.枚举的比较运算

枚举类型不能做大小比较,但是可以做身份比较和等值比较。

from enum import Enum
class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLANK = 3
    RED = 4

>>> print(VIP.YELLOW == VIP.GREEN)
Flase
>>> print(VIP.YELLOW == 1)
Flase
# 身份比较
>>> print(VIP.YELLOW is VIP.YELLOW)
True
# 不支持大小比较
>>> print(VIP.GREEN > VIP.YELLOW)
Flase

7.枚举转换

from enum import Enum
class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLANK = 3
    RED = 4

>>> num = 1
>>> print(VIP(num))
VIP.YELLOW

8.限制枚举数据类型

from enum import IntEnum,unique

@unique  #限制VIP枚举不能有重复值
class VIP(IntEnum): #限制枚举类只能是数值
    YELLOW = 1
    GREEN = 2
    BLANK = 3
    RED = 4

python3.7 入门教程

Python 准备工作(1) Python 基本数据类型 Number(2) Python 字符串 str(3) Python 列表List(4) Python 元组tuple(5) Python 集合set(6) Python 字典 dict(7) Python 变量(8) Python 运算符(9) Python 条件语句(10) Python 循环语句(11) Python 包 模块(12) Python 函数一(13) Python 函数二(14) Python 面向对象(15) Python 正则(16) Python json(17) Python 枚举(18) Python 闭包(19) Python 装饰器(20) Python 杂记(21) Python with(22)