枚举其实是一个类 枚举类不实例化(23种设计模式:单例模式)
一、枚举其实是一个类 枚举类不实例化(23种设计模式:单例模式)
from enum import Enum
#继承自枚举类
class VIP(Enum):
YELLOW=1
#YELLOW=2会报错,防止相同标签产生
GREEN=2
BLACK=3
RED='ndh'#允许
class VIP1(Enum):
YELLOW=1
#YELLOW=2会报错,防止相同标签产生
GREEN=2
BLACK=3
RED=4
#枚举的优点:不可变、不重复及防止相同标签的功能
枚举的优点:不可变、不重复及防止相同标签的功能
二、枚举类型 !
print(VIP.YELLOW)#>>>VIP.YELLOW 打印枚举类型
#VIP.yellow=6#会报错,因为枚举不可改变
#通过.value属性可以访问到枚举值!
print(type(VIP.GREEN.value))#<class 'int'>
print(VIP.GREEN.value)#2
#通过.name属性可以访问到标签值!
print(type(VIP.GREEN.name))#<class 'str'>
print(VIP.GREEN.name)#GREEN
# 通过枚举名称可以获取枚举类型
print(VIP['GREEN'])#>>>VIP.GREEN
#通过遍历可以获取枚举类型
for i in VIP:
print(i)
'''
输出结果:
VIP.GREEN
VIP.YELLOW
VIP.GREEN
VIP.BLACK
VIP.RED
'''
输出结果:
#输出结果:
>>>VIP.YELLOW
>>><class 'int'>
>>>2
>>>|<class 'str'>
>>>GREEN
>>>VIP.GREEN
>>>VIP.GREEN
VIP.YELLOW
VIP.GREEN
VIP.BLACK
VIP.RED
三、枚举之间的比较
1、等值比较
#1、等值比较
result =VIP.GREEN==VIP.YELLOW
print(result)#>>>Flase
result =VIP.GREEN==VIP.GREEN
print(result)#>>>Ture
reslut=VIP.GREEN==2
print(result)#>>>Ture
2、身份比较
#2、身份比较
result =VIP.GREEN is VIP.GREEN
print(result)#>>>Ture
result =VIP.GREEN == VIP1.GREEN
print(result)#>>>Flase
#两个枚举类虽然数值相同,但实质对于本身来说一个,所以返回Flase
3、不支持大小比较
#3、不支持大小比较
#reslut=VIP.GREEN > VIP.YELLOW
print(reslut)#报错:TypeError: unorderable types: VIP() > VIP()
四、枚举的注意事项
1、不可变、不重复及防止相同标签的功能
2、可以允许枚举中两个类型的值相同 ,如YELLOW=1 GREEN=1 这里两个枚举标签名互为对方的别名
class VIP2(Enum):
YELLOW=1
#YELLOW=2会报错,防止相同标签产生
GREEN=1
#不输出别名枚举标签
for i in VIP2:
print(i)
#>>>VIP2.YELLOW 这里YELLOW\GREEN只打印其中一个
#输出别名枚举标签
for i in VIP2.__members__.items():
print(i)
#>>>('YELLOW', <VIP2.YELLOW: 1>) ('GREEN', <VIP2.YELLOW: 1>)
#输出别名枚举标签
for i in VIP2.__members__:
print(i)
#>>>YELLOW GREEN
#使用枚举良好的编码实例:
if a==VIP.GREEN:#<==>a==2
print()
if a==VIP.YELLOW:#<==>a==1
print()
a=1
print(VIP(a))
#>>>VIP.YELLOW
五、相对于枚举,普通的表示变量的两种方式表示
(不可取,因为1、可变2、没有防止相同标签的功能)
#1、
a={'yellow':1,'green':2}
a['yellow']=3#不可取,因为可变
#2、
class TypeDiamond():
yellow=1
green=2