目录
枚举
- 枚举的意义重在标识。
- 类中赋常量来定义标识。
-
from enum import Enum class VIP(Enum): YELLOW = 1 RED = 2 print(VIP.YELLOW) # ::输出 VIP.YELLOW
-
枚举和普通类的区别
- (用字典和普通类表示类型。)
-
{'yellow':1,'red':2} class VIP(): YELLLOW = 1 GREEN = 1 RED = 2 #(可变) #(没有防止相同标签值的功能) #(YELLOW是1,GREEN也可以是1,字典的值可以轻松改变。)
-
枚举类型,枚举名称和枚举值
from enum import Enum
class VIP(Enum):
YELLOW = 1
RED = 2
print(VIP.YELLOW)
print(VIP['YELLOW'])
print(VIP.YELLOW.name)
print(VIP.YELLOW.value)
# ::输出
VIP.YELLOW 枚举类型
VIP.YELLOW 枚举类型
YELLOW 枚举名称
1 枚举值
# ::类型
# <enum 'VIP'>
# <enum 'VIP'>
# <class 'str'>
# <class 'int'>
(枚举遍历得到枚举类型)
for v in VIP:
print(v)
# ::输出
VIP.YELLOW
VIP.RED
枚举的注意事项
(枚举的标签名称不可以相同)
(枚举的值可以相同,但是第二个枚举类型可以看做第一个枚举类型的别名。)
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 1
# 更像是 YELLOW_ALIAS = 1
RED = 2
# 用for in循环直接遍历VIP不会遍历出VIP.GREEN(被当做VIP.YELLOW的别名跳过)
#(遍历VIP.__members__属性得到所有的枚举名称)
for v in VIP.__memebers__
print(v)
::输出
YELLOW
GREN
RED
for v in VIP.__members__.items():
print(v)
# ('YELLOW', <VIP.YELLOW: 1>)
print(v[1])
# VIP.YELLOW --> 枚举类型
# v[1].name v[1].value
枚举转换
(通常代码中使用的是枚举类型,而数据库中存储的是相对应的数字,如何将数据库的数字转换成相应的枚举类型。)
from enum import Enum
class VIP(Enum):
YELLOW = 1
a = 1
VIP(a)
# VIP.YELLOW
小结
#(枚举值也可以是字符串,VIP.YELLOW = "str",如果强制枚举值必须为数字,可以继承IntEnum)
from enum import IntEnum
class VIP(IntEnum):
YELLOW = 1
#(使用unique装饰器强制使枚举值唯一。)
from enum import Enum,unique
@unique
class VIP(Enum):
YELLOW = 1
RED = 2
#(如果枚举值相同即存在别名情况,会报错。)