python 标准库Enum模块

发布时间 2023-08-08 16:56:35作者: enjoyzier

1.Enum模块简介

枚举(enumeration)在许多编程语言中常被表示为一种基础的数据结构使用,枚举帮助组织一系列密切相关的成员到同一个群组机制下,一般各种离散的属性都可以用枚举的数据结构定义,比如颜色、季节、国家、时间单位等
enum规定了一个有限集合的属性,限定只能使用集合内的值,明确地声明了哪些值是合法值,如果输入不合法的值会引发错误,只要是想要从一个限定集合取值使用的方式就可以使用enum来组织值

python中的标准库Enum模块定义了四个枚举类,可用于定义唯一的名称和值集:Enum,IntEnum,Flag和IntFlag。它还定义了一个装饰器,unique()和一个helper,auto。

Content                      Description                                                                                   Remarks
class enum.Enum           创建枚举实例的基类    
class enum.IntEnum        用于创建同属于int子类枚举常量的基类    
class enum.IntFlag        用于创建枚举常量的基类,可以使用按位运算符组合而不会丢失其IntFlag成员资格。 IntFlag成员也是int的子类。     New in version 3.6
class enum.Flag           用于创建枚举常量的基类,可以使用按位运算符组合而不会丢失其IntFlag成员资格。                              New in version 3.6
unique()                  枚举类装饰器,用于确保任何一个值只有一个名字与其绑定    
class enum.auto           实例被替换为枚举成员的合适值。                                                                    New in version 3.6

2.Enum常用方法简介

# 定义
from enum import Enum, unique
# 这行unique装饰器可以让枚举类中不能有重复值
# @unique
class ColorEnum(Enum):
    RED = "red"
    GREEN = "green"
    BLUE = "blue"
    # PINK = "red"
    # 这里如果加上了unique装饰器,运行时会报错duplicate names
    # 没加装饰器,可以设置相同属性。但是PINK会被当作RED的别名,即 ColorEnum.PINK

# 取值
print(ColorEnum.RED)
# 输出 ColorEnum.RED, 注意这里无法输出值

print(ColorEnum.RED.value)
# 输出 "red" value表示枚举的值

print(ColorEnum.RED.name)
# 输出 "RED"  name表示输出枚举变量

# 内置属性
print(ColorEnum._member_names_)
# 输出 ['RED', 'GREEN', 'BLUE'] 即全部枚举变量的列表

print(ColorEnum._value2member_map_)
# 输出 {'red': <ColorEnum.RED: 'red'>, 'green': <ColorEnum.GREEN: 'green'>, 'blue': <ColorEnum.BLUE: 'blue'>}
# 这是一个字典,字典键是枚举值,值是枚举变量
# 通过这两个内置属性可以轻易获取全部枚举值和变量

print(ColorEnum._value2member_map_.keys())
#dict_keys(['red', 'green', 'blue']),可通过此方式获取全部枚举变量的值

print(ColorEnum.__members__.items())
# 得到全部枚举值odict_items([('RED', <ColorEnum.RED: 'red'>), ('GREEN', <ColorEnum.GREEN: 'green'>), ('BLUE', <ColorEnum.BLUE: 'blue'>)])

#遍历
for item in ColorEnum:
    print(item.name)
    print(item.value)


#使用自动赋值
#如果确切的值不重要,您可以使用auto:

from enum import Enum, auto
class Color(Enum):
   RED = auto()
   BLUE = auto()
   GREEN = auto()
print(list(Color))
#[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]
View Code

 

 

>>>>>待续