• 5.9 enum--支持枚举类型


    enum模块提供了枚举类型的支持。枚举类型是由一个名称和一个统一值来组成。值是常量的值。它们之间能够通过名称进行比較和引用,还能够迭代訪问。

    5.9.1 模块内容

    本模块主要定义了两种枚举类型:EnumIntEnum。定义了一个装饰器函数unique(),以便保证全部枚举常量的唯一性。

    class enum.Enum 

    构造枚举常量的基类。

    样例:

    #python 3.4

    import enum

     

    class Color(enum.Enum):

        red = 1

        green = 2

        blue = 3

     

    print(Color.red, repr(Color.red))

    print(Color.green)

    print(Color.blue)

    结果输出例如以下:

    Color.red <Color.red: 1>

    Color.green

    Color.blue

     

    class enum.IntEnum 

    构造以整数值为枚举值的基类。本类里的枚举值能够与整数相比較,普通的枚举类是不能与整数相比較的。

    此类主要用为了旧的代码兼容。或者大大地提高了便利性的场合,否则还是使用普通的枚举类会比較好,由于它不与普通类型相互发生作用,避免了一些编程上失误。

    样例:

    #python 3.4

    import enum

     

    class Color(enum.IntEnum):

        red = 1

        green = 2

        blue = 3

     

    print(Color.red, repr(Color.red))

    print(Color.green)

    print(Color.blue)

    print(Color.red == 1)

    结果输出例如以下:

    Color.red <Color.red: 1>

    Color.green

    Color.blue

    True

     

    enum.unique() 

    本装饰器函数保证了每一个名称仅仅能绑定一个值,达到枚举值的唯一性。

    样例:

    #python 3.4

    import enum

     

    class Color(enum.IntEnum):

        red = 1

        green = 2

        blue = 3

        red = 5

        

    print(Color.red, repr(Color.red))

    print(Color.green)

    print(Color.blue)

    结果输出例如以下:

    Traceback (most recent call last):

      File "F:/temp/pywin/enum1.py", line 4, in <module>

        class Color(enum.IntEnum):

      File "F:/temp/pywin/enum1.py", line 8, in Color

        red = 5

      File "C:Python34libenum.py", line 66, in __setitem__

        raise TypeError('Attempted to reuse key: %r' % key)

    TypeError: Attempted to reuse key: 'red'

     

    枚举常量能够迭代遍历:

    样例:

    #python 3.4

    import enum

     

    class Color(enum.IntEnum):

        red = 1

        green = 2

        blue = 3

     

    for i in Color:

        print(i)

    结果输出例如以下:

    Color.red

    Color.green

    Color.blue

     

    枚举常量訪问方式:

    样例:

    #python 3.4

    import enum

     

    class Color(enum.IntEnum):

        red = 1

        green = 2

        blue = 3

     

    print(Color(2))

    print(Color['red'])

    red = Color.red

    print(red.name, red.value)

    结果输出例如以下:

    Color.green

    Color.red

    red 1

    在这里提供三种訪问方式:Color(2),  Color[‘red’],  red.value

     

    通过函数API方式创建枚举常量:

    样例:

    #python 3.4

    import enum

     

    Animal = enum.Enum('Animal', 'ant bee cat dog')

    print(Animal)

    print(list(Animal))

    结果输出例如以下:

    <enum 'Animal'>

    [<Animal.ant: 1>, <Animal.bee: 2>, <Animal.cat: 3>, <Animal.dog: 4>]

     

    避免每一个枚举常量都须要指定值:

    样例:

    #python 3.4

    import enum

     

    class AutoNumber(enum.Enum):

         def __new__(cls):

             value = len(cls.__members__) + 1

             obj = object.__new__(cls)

             obj._value_ = value

             return obj

     

    class Color(AutoNumber):

         red = ()

         green = ()

         blue = ()

    for i in Color:

        print(repr(i))

    结果输出例如以下:

    <Color.red: 1>

    <Color.green: 2>

    <Color.blue: 3>




    蔡军生  QQ:9073204  深圳

  • 相关阅读:
    AcWiing 翻硬币
    AcWing 飞行员兄弟 二进制枚举
    AcWing 费解的开关 二进制枚举
    vue发送短信逻辑
    使用celery异步发送短信
    celery配置与基本使用
    celery原理与组件
    短信验证接口
    图片验证码接口
    编写注册接口
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8392220.html
Copyright © 2020-2023  润新知