IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]5.9 enum--支持枚举类型

    caimouse发表于 2016-02-20 15:21:04
    love 0

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

    5.9.1 模块内容

    本模块主要定义了两种枚举类型:Enum和IntEnum。定义了一个装饰器函数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:\Python34\lib\enum.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  深圳



沪ICP备19023445号-2号
友情链接