Python-枚举,,  枚举其实本质上是


  枚举其实本质上是一种映射,为了满足对分类的可读性,在数据库中分类的存储一般为数字编号,而直接使用数字编号在代码中可阅读性太差,然后就产生了枚举类型

枚举类没有出现之前,则通过变量、字典和类的方式定义枚举类

  1.变量方式定义枚举

# 男SQL_MALE = 0# 女SQL_FEMALE = 1

  2.字典方式定义枚举

SQL_SEX = {‘MALE‘: 0, ‘FEMALE‘: 1}

  3.类方式定义枚举

class Sql:    MALE = 0    FEMALE = 1print(Sql.MALE)

  #都很好解决了枚举需求,但都有可变、没有防止相同标签的缺陷

那,枚举需要的特性有哪些?

  1.不能更改

  2. 不能有相同类型的标签

  3.对应的数值相同,下面的类型标签相当于别名

枚举模块  enum

import enumclass Course(enum.Enum):    PYTHON = 0    GO = 1    C = 2    JAVA = 3course_type = Course.PYTHON
# 只输出类型,而不是类型对应的值print(course_type)

 

对枚举类有哪些相关操作

  1.遍历枚举类

import enumclass Course(enum.Enum):    PYTHON = 0    GO = 1    C = 2    JAVA = 3for Type in Course:    print(Type)

  2.取枚举类型和枚举类型

import enumclass Course(enum.Enum):    PYTHON = 0    GO = 1    C = 2    JAVA = 3# 取名字enum_name = Course.PYTHON.name# 取值enum_value = Course.PYTHON.valueprint(type(enum_name), enum_name)print(type(enum_value), enum_value)

  3.枚举间只能 ==和is关系运算

import enumclass Course(enum.Enum):    PYTHON = 0    BEI_MEN_CHUI_XUE = 0    GO = 1    C = 2    JAVA = 3print(Course.PYTHON is Course.BEI_MEN_CHUI_XUE)print(Course.PYTHON == Course.BEI_MEN_CHUI_XUE)

  4.把 value如 0 1等转换为枚举类型

import enumclass Course(enum.Enum):    PYTHON = 0    BEI_MEN_CHUI_XUE = 0    GO = 1    C = 2    JAVA = 3value = 0enum_type = Course(value)print(enum_type, type(enum_type))

  5.限制枚举类型中类型对应的值只能是int类型,需要继承enum中的IntEnum

import enumclass Course(enum.IntEnum):    PYTHON = 0    BEI_MEN_CHUI_XUE = 0    GO = 1    C = 2    JAVA = 3

  6.限制枚举类型中不能有相同的对应的值,需要通过装饰器unique装饰枚举类

import enum@enum.uniqueclass Course(enum.IntEnum):    PYTHON = 0    GO = 1    C = 2    JAVA = 3print(Course.PYTHON)

  

经验:

  1.枚举类型本质上是为了解决数字编号到代码中的可读性问题,一般用于数据库存储使用

  2.枚举类型是设计模式中的单例设计模式,不能实例化

经验关于设计模式:

  1.设计模式不能解决代码混乱问题,设计模式解决的是需求变化的频繁导致代码更改频繁的一种思路

  2.设计模式虽然很有优势,本身最重要的还是团队的规范和能力认识问题,需要花费非常大的时间成本和需要非常优秀的技术人员(2到3年的编码经验)

  3.设计模式还需要考量项目的生命周期,如果是大项目可以考虑设计模式,小项目就不必了,综合考量时间成本和技术能力选择是否使用设计模式

  4.代码的可读性永远放在第一位!代码的可读性永远放在第一位!代码的可读性永远放在第一位!重要的事情说3遍

Python-枚举

评论关闭