Python---枚举,枚举类与普通类的区别
程序员文章站
2022-06-16 10:04:06
...
文章内容:
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中设计模式
#单利模式
#设计模式的优劣
上一篇: okhttp的优点
下一篇: Python>枚举类