Python3(八) 枚举详解

一.枚举实际上是一个类

建议标识名字用大写数据库

1.枚举类:spa

from enum import Enum
 
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
 
print(VIP.YELLOW)
 
#VIP.YELLOW    #关注的是它的标签不是数字

2 枚举和普通类相比的优点code

  三种其余的普通方法表示枚举:blog

(1)

yellow = 1

green = 22)字典的表示方式

{'yellow':1,'green':2}    

(3)类的表示方式

class TypeDiamond():

    yellow = 1

    green = 2

这些方式,它们都是可变的,能够在代码中轻易的更改值,且没有防止相同标签的功能。继承

 

3.枚举的特色:it

from enum import Enum
 
class VIP(Enum):
 
    YELLOW = 1
 
   #YELLOW= 2   #不可重复,报错
 
    BLACK = 3
 
    RED = 4
 
print(VIP.YELLOW)
 
#VIP.YELLOW = 6    #不可更改,报错

二.枚举类型、枚举名称与枚举值

1.获取枚举类型下某一数值:class

from enum import Enum
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
    
 
print(VIP.YELLOW.value)
 
print(VIP.YELLOW.name)
 
print(VIP.YELLOW)
 
print(VIP['YELLOW'])
 
#1        #枚举值
 
#YELLOW    #<class 'str'> 获取标签名
 
#VIP.YELLOW    #<enum 'VIP'>    枚举类型
 
#VIP.YELLOW    

2.枚举是能够遍历的:import

from enum import Enum
 
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
for v in VIP :
 
    print(v)
 
#VIP.YELLOW
VIP.GREEN
VIP.BLACK
VIP.RED

三. 枚举的比较运算 

1.两个枚举之间能够使用等值比较(==),枚举与数值比较的判断结果不对。两个枚举之间不能进行大小比较。循环

2.支持is操做:遍历

result = VIP.GREEN is VIP.GREEN
 
#True

3.两个大类之间也能够进行等值比较,不过结果是False:

from enum import Enum
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
class VIP1(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
print(VIP.GREEN ==VIP1.GREEN)
 
#False

四.枚举注意事项

1.枚举的数值能够相同,在这种状况下,将第二种枚举类型当作别名。遍历时不会打印别名:

class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 1    #别名,不会报错
 
    BLACK = 3
 
    RED = 4
 
print(VIP.GREEN)
 
#VIP.YELLOW

2.把别名加入遍历循环:

(1)
for v in VIP.__members__.items() :
 
    print(v)
 
#('YELLOW', <VIP.YELLOW: 1>)
 
#('GREEN', <VIP.GREEN: 1>)
 
#('BLACK', <VIP.BLACK: 3>)
 
#('RED', <VIP.RED: 4>)
 
(2)
 
或者遍历__members__:
 
for v in VIP.__members__:
 
    print(v)
 
#YELLOW
 
#GREEN
 
#BLACK
 
#RED

五.枚举转换

1.在数据库里通常存储数值或者标签名字来表明枚举类型,推荐存储数值,数字占用的空间更小。可是不建议在代码种用数值表明枚举,可读性不强。

2.如何将数字转换成枚举类型: 

from enum import Enum
 
a = 1
 
class VIP(Enum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4
 
print(VIP(a))    #转换枚举类型
 
#VIP.YELLOW

六.枚举小结

1.要求每一个枚举类型都是数字的时候继承IntEnum:

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

2.限制不一样的枚举类型不能取相同的值:

from enum import Enum
 
from enum import IntEnum,unique
 
@unique    #装饰器
 
class VIP(IntEnum):
 
    YELLOW = 1
 
    GREEN = 2
 
    BLACK = 3
 
    RED = 4

枚举类型不能实例化,属于单例模式

相关文章
相关标签/搜索