欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>枚举类