Python成长记十二(枚举)

枚举(其实就是一个类)
案例:
        from enum import  Enum
       class VIP(Enum):
           RED = 1
           BLACK = 2
           GREEN = 3

1.枚举和普通类相比有什么优势
  普通类或者字典:(1)可变 (2)没有防止相同标签的功能
  枚举: (1)不可变 (2)有防止相同标签的功能
  比如:
   不可变性:
    from enum import Enum
            class VIP(Enum):
            RED = 1
            BLACK = 2
           GREEN = 3

           VIP.RED=6 #试图改变标签的值 报错

防止标签相同:
    from enum import Enum
            class VIP(Enum):
            RED = 1
            RED = 2 #报错
            GREEN = 3


2. 枚举类型、枚举名与枚举值

  (1)访问枚举值
   from enum import Enum
   class VIP(Enum):
          RED = 1
          BLACK = 2
          GREEN = 3
   print(VIP.RED.value)

结果:1

(2)获取标签名字

    from enum import Enum
    class VIP(Enum):
            RED = 1
            BLACK = 2
            GREEN = 3
    print(VIP.RED.name)

    结果:RED

(3)枚举类型
    from enum import Enum
       class VIP(Enum):
              RED = 1
              BLACK = 2
              GREEN = 3
    print(type(VIP.RED.name))
    print(type(VIP.RED))
    print(VIP['GREEN'])
    结果:
     <class 'str'>
     <enum 'VIP'>

     VIP.GREEN

(4)遍历获取枚举类型
    from enum import Enum
    class VIP(Enum):
            RED = 1
            BLACK = 2
            GREEN = 3
     for v in VIP:
          print(v)
结果:
    VIP.RED
    VIP.BLACK

    VIP.GREEN

3、枚举的比较运算
  (1)类型比较
    例1:
    from enum import Enum
    class VIP(Enum):
           RED = 1
           BLACK = 2
           GREEN = 3
    res = VIP.GREEN == VIP.BLACK
    print(res)

   结果:False

 例2:

 from enum import Enum

     class VIP(Enum):

         RED = 1
         BLACK = 2
         GREEN = 3
 res = VIP.GREEN == VIP.GREEN
 print(res)

结果:True

例3:
   from enum import Enum
         class VIP(Enum):
               RED = 1
               BLACK = 2
               GREEN = 3
   res = VIP.GREEN > VIP.BLACK
   print(res)
   结果:报错


例4:

 from enum import Enum
 class VIP(Enum):
    RED = 1
    BLACK = 2
    GREEN = 3
res = VIP.GREEN is VIP.GREEN #身份比较
print(res)
结果:True

例5:两个枚举的比较
    from enum import Enum
    class VIP(Enum):
         RED = 1
         BLACK = 2
        GREEN = 3

   class VIP2(Enum):
        RED = 1
        BLACK = 2
        GREEN = 3
res = VIP.GREEN == VIP2.GREEN
print(res)
结果:False

4.枚举的注意事项
  (1)两个数值相同
 from enum import Enum
         class VIP(Enum):
               RED = 1
               BLACK = 1
               GREEN = 3
res = VIP.BLACK
print(res)
结果:VIP.RED
建议使用别名:
from enum import Enum
     class VIP(Enum):
            RED = 1
            RED_ALIAS = 1
            GREEN = 3
res = VIP.RED_ALIAS
print(res)

结果:VIP.RED

(2)遍历含有相同值的枚举

    例1:

    from enum import Enum
class VIP(Enum):
    RED = 1
    RED_ALIAS = 1
    GREEN = 3
for v in VIP:
    print(v)
结果:
  VIP.RED

      VIP.GREEN

    例2:
        from enum import Enum
class VIP(Enum):
    RED = 1
    RED_ALIAS = 1
    GREEN = 3
for v in VIP.__members__.items():
    print(v)
     结果:
        ('RED', <VIP.RED: 1>)
('RED_ALIAS', <VIP.RED: 1>)

('GREEN', <VIP.GREEN: 3>)

例3:
 from enum import Enum
class VIP(Enum):
    RED = 1
    RED_ALIAS = 1
    GREEN = 3
for v in VIP.__members__:
    print(v)
结果: RED  RED_ALIAS  GREEN

5.枚举转化
  案例:
    from enum import Enum
class VIP(Enum):
    RED = 1
    RED_ALIAS = 1
    GREEN = 3
a = 1 #将a的类型转换
print(VIP(a))
   结果:VIP.RED

6. IntEnum的使用
  作用:将枚举统限制为数字类型
  案例:
    from enum import IntEnum
    class VIP(IntEnum):
    RED = 1
    RED_ALIAS = 'str'
    GREEN = 3
   结果:报错

7. unique装饰器的使用
  作用:限制枚举值唯一
  案例:
   from enum import unique
@unique
class VIP(IntEnum):
    RED = 1
    RED_ALIAS = 1
    GREEN = 3
   结果:报错

 总结:枚举是一种单例模式,不需实例化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值