Python---枚举,枚举类与普通类的区别

文章内容:
1.枚举类与普通类的区别,普通类的缺陷
2.枚举类型,枚举类名称,枚举值
3.枚举之间的比较
4.枚举转换
5.Enum和IntEnum的区别
6.如何避免枚举别名的出现

#枚举类
#枚举类不能够实例化,实例化没有意义
from enum import Enum

class COLOR(Enum):
    YELLOW=1
   #YELLOW=2#TypeError: Attempted to reuse key: 'YELLOW'
    GREEN=2
    BLACK=3
    RED=4
print(COLOR.YELLOW)#COLOR.YELLOW
print(type(COLOR.YELLOW))#<enum 'COLOR'>枚举类型
print(COLOR.YELLOW.value)#1
print(type(COLOR.YELLOW.value))#<class 'int'>
print(COLOR.YELLOW.name)#YELLOW
print(type(COLOR.YELLOW.name))#<class 'str'>
COLOR.YELLOW=5#AttributeError: Cannot reassign members.

#普通类
#缺陷:可变,没有防止相同值得功能
#1
yellwo=1
green=2
black=3
red=4
#2
{'yellwo':1,'green':2,'black':3,'red':4}#可变
#3
class Color():#可变
    yellwo=1
    green=2
    black=3
    red=4

#枚举类型、枚举名称与枚举值
from enum import Enum

class COLOR(Enum):
    YELLOW=1
    GREEN=2
    BLACK=3
    RED=4
print(COLOR.YELLOW)#COLOR.YELLOW
print(type(COLOR.YELLOW))#<enum 'COLOR'>枚举类型
print(COLOR.YELLOW.value)#1
print(type(COLOR.YELLOW.value))#<class 'int'>枚举值
print(COLOR.YELLOW.name)#YELLOW
print(type(COLOR.YELLOW.name))#<class 'str'>枚举名称
print(COLOR['GREEN'])#COLOR.GREEN

for i in COLOR:
    print(i)
#COLOR.YELLOW
#COLOR.GREEN
#COLOR.BLACK
#COLOR.RED


#枚举之间的比较
from enum import Enum

class COLOR(Enum):
    YELLOW=1
    GREEN=2
    BLACK=3
    RED=4
result1=COLOR.GREEN==COLOR.BLACK
print(result1)#False
result2=COLOR.GREEN==COLOR.GREEN
print(result2)#True
result3=COLOR.GREEN==2
print(result3)#False
result4=COLOR.GREEN<COLOR.BLACK
print(result4)#TypeError: '<' not supported between instances of 'COLOR' and 'COLOR'
result5=COLOR.GREEN is COLOR.GREEN#身份的比较
print(result5)#True
class COLOR2(Enum):
    YELLOW=1
    GREEN=2
    BLACK=3
    RED=4
result6=COLOR.GREEN == COLOR2.GREEN#不是同一个枚举不能作比较
print(result6)#False


#枚举的注意事项
from enum import Enum

class COLOR(Enum):
    YELLOW=1
   #YELLOW=2#会报错
    GREEN=1#不会报错,GREEN可以看作是YELLOW的别名
    BLACK=3
    RED=4
print(COLOR.GREEN)#COLOR.YELLOW,还是会打印出YELLOW
for i in COLOR:#遍历一下COLOR并不会有GREEN
    print(i)
#COLOR.YELLOW
#COLOR.BLACK
#COLOR.RED
#怎么把别名遍历出来
for i in COLOR.__members__.items():
    print(i)
#('YELLOW', <COLOR.YELLOW: 1>)
#('GREEN', <COLOR.YELLOW: 1>)
#('BLACK', <COLOR.BLACK: 3>)
#('RED', <COLOR.RED: 4>)
for i in COLOR.__members__:
    print(i)
#YELLOW
#GREEN
#BLACK
#RED


#枚举转换
#最好在数据库存取使用枚举的数值而不是使用标签名字字符串
#在代码里面使用枚举类
a=1
print(COLOR(a))#COLOR.YELLOW


#Enum和IntEnum的区别
from enum import Enum
class COLOR1(Enum):
    YELLOW=1
    GREEN='str'
    BLACK=3
    RED=4
from enum import IntEnum
class COLOR2(IntEnum):#ValueError: invalid literal for int() with base 10: 'str'
    YELLOW=1
    GREEN='str'
    BLACK=3
    RED=4
#怎么避免出现相同枚举值,避免别名的出现
from enum import IntEnum,unique
@unique
class COLOR3(IntEnum):#ValueError: duplicate values found in <enum 'COLOR3'>: GREEN -> YELLOW
    YELLOW=1
    GREEN=1
    BLACK=3
    RED=4

#23中设计模式
#单利模式
#设计模式的优劣

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值