zoukankan      html  css  js  c++  java
  • Python-枚举

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

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

      1. 变量方式定义枚举

    # 男
    SQL_MALE = 0
    # 女
    SQL_FEMALE = 1

      2. 字典方式定义枚举

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

      3. 类方式定义枚举

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

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

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

      1. 不能更改

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

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

    枚举模块  enum

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

     

    对枚举类有哪些相关操作

      1. 遍历枚举类

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

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

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

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

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

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

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

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

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

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

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

      

    经验:

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

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

    经验关于设计模式:

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

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

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

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

  • 相关阅读:
    linux下文件/目录的默认权限
    linux中如何查看文件/文件夹的大小
    linux定时/计划任务
    shell脚本中EOF的妙用
    linux中的计算器
    linux操作系统的时间
    Anaconda如何设置网络代理
    前端学习问题积累
    angular-ng-zorro,自定义模态窗拖动指令
    angular学习笔记之父子传值
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/9139070.html
Copyright © 2011-2022 走看看