zoukankan      html  css  js  c++  java
  • 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  深圳

  • 相关阅读:
    JavaWeb--HttpSession案例
    codeforces B. Balls Game 解题报告
    hdu 1711 Number Sequence 解题报告
    codeforces B. Online Meeting 解题报告
    ZOJ 3706 Break Standard Weight 解题报告
    codeforces C. Magic Formulas 解题报告
    codeforces B. Sereja and Mirroring 解题报告
    zoj 1109 Language of FatMouse 解题报告
    hdu 1361.Parencodings 解题报告
    hdu 1004 Let the Balloon Rise 解题报告
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8392220.html
Copyright © 2011-2022 走看看