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
  • 相关阅读:
    java+opencv实现图像灰度化
    java实现高斯平滑
    hdu 3415 单调队列
    POJ 3368 Frequent values 线段树区间合并
    UVA 11795 Mega Man's Mission 状态DP
    UVA 11552 Fewest Flops DP
    UVA 10534 Wavio Sequence DP LIS
    UVA 1424 uvalive 4256 Salesmen 简单DP
    UVA 1099 uvalive 4794 Sharing Chocolate 状态DP
    UVA 1169uvalive 3983 Robotruck 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8567028.html
Copyright © 2011-2022 走看看