• Python面向对象-枚举类型enum


    枚举类型:在实际问题中,有些变量的值被限定在一个有限的范围内。例如:一个星期有且只有7天,一年有且只有十二个月,一个班每周有6门课程等等。如果把这些量说明为整型、字符串或者其他类型显然是不合适。编程界为此提供了一种称为枚举的类型。在枚举类型定义中列举出所有可能的取值,被说明为该枚举类型的变量取值范围不能超过定义的范围。枚举是一种基本的数据类型,因为它不能再分解为任何基本类型。

    python中,一般的会为枚举类型定义一个class类型,然后每个常量都是class的一个唯一的实例。Enum类实现了这个功能:

    >>> from enum import Enum
    >>> Month = Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
    >>> for name,member in Month.__members__.items():
    ...     print(name,',',member,',',member.value)
    ...
    Jan , Month.Jan , 1
    Feb , Month.Feb , 2
    Mar , Month.Mar , 3
    Apr , Month.Apr , 4
    May , Month.May , 5
    Jun , Month.Jun , 6
    Jul , Month.Jul , 7
    Aug , Month.Aug , 8
    Sep , Month.Sep , 9
    Oct , Month.Oct , 10
    Nov , Month.Nov , 11
    Dec , Month.Dec , 12

    上面我们定义了一个Month类型的枚举类,然后枚举出它的所有的成员。其中,value属性是自动赋值给成员的int型常量,默认从1开始。

    如果需要更精确的控制枚举类型,可以从Enum派生出自定义类,同时利用@unique装饰器帮助我们检查有没有重复值。

    >>> from enum import Enum,unique
    >>> @unique
    ... class Weekday(Enum):
    ...     Sun = 0
    ...     Mon = 1
    ...     Tue = 2
    ...     Wed = 3
    ...     Thu = 4
    ...     Fri = 5
    ...     Sat = 6
    ...
    >>> day1  = Weekday.Mon
    >>> day1
    <Weekday.Mon: 1>
    >>> print(day1)
    Weekday.Mon
    >>> print(Weekday.Tue)
    Weekday.Tue
    >>> print(Weekday['Tue'])
    Weekday.Tue
    >>> print(Weekday.Tue.value)
    2
    >>> day1 == Weekday.Mon
    True
    >>> Weekday(1)
    <Weekday.Mon: 1>
    >>> Weekday(3)
    <Weekday.Wed: 3>
    >>> for name,member in Weekday.__members__.items():
    ...     print(name,':',member)
    ...
    Sun : Weekday.Sun
    Mon : Weekday.Mon
    Tue : Weekday.Tue
    Wed : Weekday.Wed
    Thu : Weekday.Thu
    Fri : Weekday.Fri
    Sat : Weekday.Sat
  • 相关阅读:
    结对编程1-基于GUI的四则运算生成器
    个人作业1——四则运算题目生成程序(基于控制台)
    软件工程的实践项目课程的自我目标
    个人作业3——个人总结(Alpha阶段)
    结对编程2——单元测试
    个人作业(2)---英语学习APP案例分析
    结对作业1----基于GUI的四则运算生成器
    个人作业1——四则运算题目生成程序(基于控制台)
    个人作业3——个人总结(Alpha阶段)
    结对编程2——单元测试
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8567028.html
Copyright © 2020-2023  润新知