zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    八、总结
    第5章、Kafka监控
    十一、总结
    十、图形化的客户端和监控工具
    九、zookeeper四字监控命令
    八、zookeeper 开源客户端curator介绍
    七、Zookeeper原理
    六、zookeeper 事件监听机制
    五、zookeeper的javaApi
    四、zookeeper的Acl权限控制
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8567028.html
Copyright © 2011-2022 走看看