• 19 枚举


    枚举的概念

    枚举也是类

    定义枚举需要先导入枚举模块:

    from enum import Enum
    

      

    枚举类型的定义

    class Color(Enum):
        RED = 1
        YELLOW = 2 # 且它们不是常量!
        GREEN = 3 #必须大写,且各枚举属性的值不能相等
    
    
    print(Color.RED) #打印结果就是Color.RED 这就是枚举的意义所在
    

      

    枚举与普通的类比有什么优势

    枚举类型的属性值是不能更改的。

    枚举的相关操作

    获取枚举标签(属性)的值:类名.属性名.value

    获取枚举标签名(属性名):类名.属性名.name  注意:打印的结果是str型

    print(type(Color.RED))
    print(type(Color.RED.name))
    结果:
    <enum 'Color'>
    <class 'str'>

    枚举的遍历

    for c in Color:
        print(c)
    结果:
    Color.RED
    Color.RED
    Color.YELLOW
    Color.GREEN
    

      

    枚举之间的比较运算

    枚举之间的比较不是value的比较,而是对象的比较。

    所以可以做等值比较,即 == 或 is 或 is not比较:

    # 赋值Color为Color1
    print(Color.RED == Color.RED)
    print(Color.RED == Color1.RED)
    print(Color.RED is Color1.RED)
    print(Color.RED is not Color1.RED)
    结果:
    True
    False
    False
    True
    

      

    枚举转换

    一般将枚举标签的值存在数据库而不是枚举标签。

    所以当从数据库将value值提出来,要得到枚举的标签:

    # a为接收来自数据库的枚举的变量
    a = 1 #假设a接收到的值为1
    #转换为枚举标签 : 枚举类名(a)
    如上面的:
    print(Color(1))
    结果为:
    Color.RED
    

      

    枚举需要注意的事情

    1.枚举不能有两个相同名的标签

    2.两个不同的标签的value不能相同,如果相同,则表示一个是另一个的别名,且普通遍历时不会将别名打印出来(若想遍历出来,使用.__member__属性)

    IntEnum

    Enum类下的枚举标签的值,可以是数值型,也可以是字符串类型。

    但当想要其类型仅为数值型时,使用IntEnum就行了。

    from enum import IntEnum
    

      

    @unique

    当你不想个标签起别名(不同的标签名相同的value)

    导入unique,然后声明类时在类上面加上@unique即可,此时如果起别名会报错:

    from enum import unique
    
    @unique
    class B(Enum):
        AA = 1
        BB = 1

    报错结果:
    ValueError: duplicate values found in <enum 'B'>: BB -> AA

      

  • 相关阅读:
    FastJson 配置Long转String类型 , 解决前后端交互, id过长,失去精度的问题
    idea使用技巧大全
    多线程下载工具
    https url 下载
    Jquery ajax请求格式
    AQS之可重入锁ReentrantLock原理
    整理所学之HashMap | 第二篇
    数据结构:哈希表例子
    整理所学之HashMap | 第一篇
    设计模式 | 第三篇:装饰者模式
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11778379.html
Copyright © 2020-2023  润新知