python枚举类型

发布时间:2019-03-16 22:24:09编辑:auto阅读(1834)

    笔记:


    一:枚举类型的定义
    二:枚举类和普通类的区别
    1:值不可变
    2:具有防止相同标签得功能,不同标签的值可以相同!


    三:枚举类型、枚举值、枚举名称
    1:VIP.YELLOW.Value 获得标签的值
    2:VIP.BLACK.name 获取标签名称
    3:枚举里面的部分为枚举类型!

    四:枚举之间的比较
    1: 支持等值比较和is, 不支持大小比较
    2: 不同枚举类之间的比较

    五:枚举的注意事项
    不同标签的值相同的时候,第二种会被当做一种别名,调用时会被覆盖!
    遍历的时候不会被打印出来,解决方法是:
    for v in VIP.__members__.items():
    print(v)

    六:枚举转换
    从数据库中去除某一个数值对应的值(a = 1),根据a的值匹配枚举的类型
    a = 1
    print(VIP(a))

    七:其他
    1:IntEnum类型说明:枚举的都是int类型的!
    2:限制枚举类型的值不能一样

    -------23种设计模式-------实践中学习--------
    -------尝试写一些包和类库------------------
    CODE:
      1 # ----------------------------------------------#
      2 # 定义一个枚举类型
      3 # ----------------------------------------------#
      4 
      5 from enum import Enum
      6 from enum import IntEnum, unique
      7 
      8 
      9 class VIP(Enum):
     10     YELLOW = 1
     11     GREEN = 2
     12     BLACK = 3
     13     RED = 4
     14 
     15 
     16 class Common:
     17     YELLOW = 2
     18 
     19 
     20 # 注意这里显示的是VIP.Black而不是3,枚举的意义重在标签而不是标签的值
     21 print(VIP.BLACK)
     22 
     23 
     24 # ----------------------------------------------------#
     25 # 枚举类和普通类的区别
     26 # 字典和普通类封装数据:   1:可变    2:没有防止相同标签得功能
     27 # ----------------------------------------------------#
     28 
     29 # VIP.GREEN = 6     # 当改变值得时候报错
     30 
     31 Common.YELLOW = 9   # 改变类变量的值
     32 print(Common.YELLOW)
     33 x = Common()           # 类的实例化
     34 print(x.YELLOW)
     35 
     36 # ----------------------------------------------#
     37 # 枚举类型、枚举值、枚举名称
     38 # ----------------------------------------------#
     39 print("Black = ", VIP.BLACK.value)  # get value of Enum
     40 
     41 print("name = ", VIP.BLACK.name)  # get value of Name,the type of name is str
     42 
     43 print(VIP.BLACK)        # 名字为枚举类型
     44 
     45 print(VIP['BLACK'])
     46 
     47 # 枚举可以被遍历
     48 for v in VIP:
     49     print(v)
     50 
     51 
     52 # ----------------------------------------------#
     53 # 枚举之间的比较,支持等值比较,不支持大小比较
     54 # ----------------------------------------------#
     55 
     56 result1 = VIP.GREEN == VIP.BLACK
     57 result2 = VIP.GREEN.value == 2    # 注意这里的结果
     58 print(result1, result2)
     59 
     60 
     61 class VIP1(Enum):
     62     YELLOW = 1
     63     GREEN = 2
     64     BLACK = 3
     65     RED = 4
     66     WRITE = 5
     67 
     68 
     69 result3 = VIP.GREEN == VIP1.GREEN
     70 print(result3)
     71 
     72 # ----------------------------------------------#
     73 # 枚举注意事项
     74 # ----------------------------------------------#
     75 
     76 
     77 class VIP2(Enum):
     78     YELLOW = 1
     79     GREEN = 1   # 别名
     80     BLACK = 3
     81     RED = 4
     82 
     83 
     84 for v in VIP2:
     85     print(v)
     86 
     87 for v in VIP2.__members__.items():
     88     print(v)
     89 
     90 for v in VIP2.__members__:
     91     print(v)
     92 
     93 # ----------------------------------------------#
     94 # 枚举转换
     95 # ----------------------------------------------#
     96 
     97 a = 1
     98 print(VIP(a))       # 可以看做是类型转换
     99 
    100 # ----------------------------------------------#
    101 # 枚举补充
    102 # ----------------------------------------------#
    103 
    104 # 1:IntEnum类型说明
    105 
    106 
    107 class VIP3(Enum):
    108     YELLOW = 1
    109     GREEN = "str"   # 别名
    110     BLACK = 3
    111     RED = 4
    112 
    113 
    114 class VIP4(IntEnum):
    115     YELLOW = 1
    116     # GREEN = 'str'   # 字符串报错
    117     BLACK = 3
    118     RED = 4
    119 
    120 
    121 # 2:限制枚举类型的值不能一样
    122 @unique
    123 class VIP6(Enum):
    124     YELLOW = 1
    125     GREEN = 1   # 当值相同的时候会报错!
    126     BLACK = 3
    127     RED = 4
    
    

     

     

关键字