• Python3.4 枚举类型的使用


    From: https://majing.io/posts/10000005131196

    枚举类型是在Python3.4新增到Python的标准库。

    创建枚举

    Python提供了两种方法来创建枚举:

    1. 基于class语法创建枚举
    2. 基于Function API创建枚举

    创建枚举首先要导入Enum类

    >>> from enum import Enum
    

    基于class语法创建枚举

    示例

    >>> from enum import Enum
    >>> class Color(Enum):
    ...     red = 1
    ...     green = 2
    ...     blue = 3
    

    示例定义以下内容:

    1. 定义了Color的枚举类型。
    2. 定义了枚举类型Color的枚举成员:Color.red,Color.green,Color.blue。
    3. 给每一个枚举成员赋值,如Color.red的值为1。需要注意的是枚举成员的值可以指定为其他类型,没有强制要求是整型。

    枚举成员包含了两个属性:name和value

    >>>Color.red.name
    red
    >>>Color.red.value
    1
    

    定义字符串类型的值

    >>> from enum import Enum
    >>> class Color(Enum):
    ...     red = 'r'
    ...     green = 'g'
    ...     blue = 'b'
    

    基于Function API创建枚举

    上面基于class创建枚举的示例用Function API可以改写为

    >>>from enum import Enum
    >>>Color = Enum('Color','red green blue')
    >>>list(Color)
    [<Color.red:1>,<Color.green:2>,<Color.blue:3>]
    

    Enum函数第一个参数为枚举名。第二个参数为枚举成员列表。

    第二个参数表示的枚举成员列表有三种方式:

    1. 使用字符串表示,各成员名使用空格隔开。成员的值从1开始自动递增。
    2. 使用元组表示,成员的值从1开始自动递增。
    3. 使用字典表示,字典可以指定枚举成员的值,其中字典的键位枚举成员名,值为枚举成员的值。

    使用字典声明示例

    >>>from enum import Enum
    >>>Color = Enum('Color',{'red':1,'green':2,'blue':4})
    

    访问枚举成员

    访问枚举成员有三种方式:

    1. 使用点号(".")引用
    2. 使用value获取,值对应的枚举成员
    3. 使用枚举成员名

    按值访问

    >>>Color(1)
    <Color.red:1>
    

    按枚举名访问

    >>>Color['red']
    <Color.red:1>
    

    遍历枚举

    枚举支持对它的成员进行遍历

    list遍历

    >>>list(Color)
    [<Color.red:1>,<Color.green:2>,<Color.blue:3>]
    

    for遍历

    >>>for color in Color:
    ...  print(color)
    

    枚举类型的比较

    >>> Color.red is Color.red
    True
    >>> Color.red is Color.blue
    False
    >>> Color.red is not Color.blue
    True
    

    注意枚举成员并非整型,是不能做大小比较,如

    >>> Color.red < Color.blue
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: unorderable types: Color() < Color()
    

    只能做相等性比较

    >>> Color.blue == Color.red
    False
    >>> Color.blue != Color.red
    True
    >>> Color.blue == Color.blue
    True
    >>> Color.blue == 2
    False
    

    定义枚举的方法

    由于枚举类型也是一个class,所以也支持给枚举类型定义方法。

    示例:

    class Mood(Enum):
      funky = 1
      happy = 3
    
      def describe(self):
        # self为枚举成员
        return self.name, self.value
    
      def __str__(self):
        return 'my custom str! {0}'.format(self.value)
    
      @classmethod
      def favorite_mood(cls):
        # cls为枚举类型
        return cls.happy
    

    使用:

    >>> Mood.favorite_mood()
    <Mood.happy: 3>
    >>> Mood.happy.describe()
    ('happy', 3)
    >>> str(Mood.funky)
    'my custom str! 1'
    

    定义枚举的子类

    定义枚举的子类需要满足:父枚举没有定义任何的枚举成员,此时才允许有子类。

    >>> class MoreColor(Color):
    ...   pink = 17
    ...
    TypeError: Cannot extend enumerations
    

    这是由于Mood已定义了枚举成员,不允许扩展。

  • 相关阅读:
    UML画图
    UML笔记
    电脑启动顺序
    评教有感
    部署图
    活动图
    给八期授课之主板电池的思考
    给八期授课之人员分配的思考
    构件图
    cocos2dx获得机器语言
  • 原文地址:https://www.cnblogs.com/Raul2018/p/10526401.html
Copyright © 2020-2023  润新知