Python——枚举(enum)
使⽤普通类直接实现枚举
在Python中,枚举和我们在对象中定义的类变量时⼀样的,每⼀个类变量就是⼀个枚举项,访问枚举项的⽅式为:类名加上类变量,像下⾯这样:
class color():
YELLOW = 1
RED = 2
GREEN = 3
PINK = 4
# 访问枚举项
print(color.YELLOW) # 1
虽然这样是可以解决问题的,但是并不严谨,也不怎么安全,⽐如:
1、枚举类中,不应该存在key相同的枚举项(类变量)
2、不允许在类外直接修改枚举项的值
class color():
YELLOW = 1
YELLOW = 3 # 注意这⾥⼜将YELLOW赋值为3,会覆盖前⾯的1
RED = 2
GREEN = 3
PINK = 4
# 访问枚举项
print(color.YELLOW) # 3
# 但是可以在外部修改定义的枚举项的值,这是不应该发⽣的
color.YELLOW = 99
print(color.YELLOW) # 99
解决⽅案:使⽤enum模块
enum模块是系统内置模块,可以直接使⽤import导⼊,但是在导⼊的时候,不建议使⽤import enum将enum模块中的所有数据都导⼊,⼀般使⽤的最多的就是enum模块中的Enum、IntEnum、unique这⼏项
# 导⼊枚举类
from enum import Enum
# 继承枚举类
class color(Enum):
YELLOW = 1
BEOWN = 1
# 注意BROWN的值和YELLOW的值相同,这是允许的,此时的BROWN相当于YELLOW的别名
RED = 2
GREEN = 3
PINK = 4
class color2(Enum):
YELLOW = 1
RED = 2
enum怎么用GREEN = 3
PINK = 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 == 1) # False
print(color.YELLOW.value == 1) # True
print(color.YELLOW == color.YELLOW) # True
print(color.YELLOW == color2.YELLOW) # False
print(color.YELLOW is color2.YELLOW) # False
print(color.YELLOW is color.YELLOW) # True
print(color(1)) # color.YELLOW
print(type(color(1))) # <enum 'color'>
注意事项如下:
1、枚举类不能⽤来实例化对象
2、访问枚举类中的某⼀项,直接使⽤类名访问加上要访问的项即可,⽐如 color.YELLOW
3、枚举类⾥⾯定义的Key = Value,在类外部不能修改Value值,也就是说下⾯这个做法是错误的
color.YELLOW = 2 # Wrong, can't reassign member
4、枚举项可以⽤来⽐较,使⽤==,或者is
5、导⼊Enum之后,⼀个枚举类中的Key和Value,Key不能相同,Value可以相,但是Value相同的各项Key都会当做别名,
6、如果要枚举类中的Value只能是整型数字,那么,可以导⼊IntEnum,然后继承IntEnum即可,注意,此时,如果value为字符串的数字,也不会报错:
from enum import IntEnum
7、如果要枚举类中的key也不能相同,那么在导⼊Enum的同时,需要导⼊unique函数
from enum import Enum, unique
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论