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小时内删除。