Python:枚举
2021-11-13 本文已影响0人
玩转测试开发
简介:枚举是与多个唯一常量值绑定的一组符号名(即成员)。枚举中的成员可以进行身份比较,并且枚举自身也可迭代。
主要包含:
4个枚举类,用来定义名称与值的唯一组合: Enum、IntEnum、Flag 和 IntFlag。此外,还定义了一个装饰器,unique(), 和一个辅助类,auto。
1、Enum:创建枚举常量的基类。
2、IntEnum:创建 int 子类枚举常量的基类。
3、IntFlag:创建可与位运算符搭配使用,又不失去 IntFlag 成员资格的枚举常量的基类。IntFlag 成员也是 int 的子类。
4、Flag:创建可与位运算符搭配使用,又不会失去 Flag 成员资格的枚举常量的基类。
unique():确保一个名称只绑定一个值的 Enum 类装饰器。
auto:以合适的值代替 Enum 成员的实例。初始值默认从 1 开始。
枚举创建:枚举是由 class 句法创建的
from enum import Enum
class Seasons(Enum):
Spring = 1
Summer = 2
Autumn = 3
Winter = 4
迭代访问枚举:
for i in Seasons:
print(i)
枚举成员的 类型 就是它所属的枚举:重要
print(type(Seasons.Summer)) # <enum 'Seasons'>
print(isinstance(Seasons.Summer, Seasons)) # True
Enum 成员 name 属性,访问枚举成员的 name:重要
print(Seasons.Autumn.name) # Autumn
Enum 成员 value 属性,访问枚举成员的 value:重要
print(Seasons.Winter.value) # 4
枚举成员可哈希,可用于字典和集合:
weather = {}
weather[Seasons.Spring] = '草长莺飞'
weather[Seasons.Summer] = '郁郁葱葱'
result = weather == {Seasons.Spring: '草长莺飞', Seasons.Summer: '郁郁葱葱'}
print(result) # True
比较运算:枚举成员是按标识号进行比较的。
print(Seasons.Autumn is Seasons.Winter) # False
print(Seasons.Autumn is Seasons.Autumn) # True
确保唯一枚举值:@enum.unique专用于枚举的 class 装饰器。
@unique
class Mistake(Enum):
ONE = 1
TWO = 2
THREE = 3
# FOUR = 3 # ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE
# @enum.unique
# 专用于枚举的 class 装饰器。
# 它会搜索一个枚举的 __members__ 并收集所找到的任何别名;只要找到任何别名就会引发 ValueError 并附带相关细节信息。
源码:
from enum import Enum
from enum import unique # 确保唯一枚举值
class Seasons(Enum):
Spring = 1
Summer = 2
Autumn = 3
Winter = 4
# Winter = 5 # 两个枚举成员的名称不能相同
# TypeError: Attempted to reuse key: 'Winter'
# 迭代访问枚举:
for i in Seasons:
print(i)
print("*" * 20)
# 枚举成员的 类型 就是它所属的枚举:
print(type(Seasons.Summer)) # <enum 'Seasons'>
print(isinstance(Seasons.Summer, Seasons)) # True
# Enum 成员 name 属性,访问枚举成员的 name
print(Seasons.Autumn.name) # Autumn
# Enum 成员 value 属性,访问枚举成员的 value
print(Seasons.Winter.value) # 4
# 枚举成员可哈希,可用于字典和集合:
weather = {}
weather[Seasons.Spring] = '草长莺飞'
weather[Seasons.Summer] = '郁郁葱葱'
result = weather == {Seasons.Spring: '草长莺飞', Seasons.Summer: '郁郁葱葱'}
print(result) # True
# 比较运算:枚举成员是按标识号进行比较的。
print(Seasons.Autumn is Seasons.Winter) # False
print(Seasons.Autumn is Seasons.Autumn) # True
@unique
class Mistake(Enum):
# @enum.unique
# 专用于枚举的 class 装饰器。
# 它会搜索一个枚举的 __members__ 并收集所找到的任何别名;只要找到任何别名就会引发 ValueError 并附带相关细节信息。
ONE = 1
TWO = 2
THREE = 3
# FOUR = 3 # ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!