简介:枚举是与多个唯一常量值绑定的一组符号名(即成员)。枚举中的成员可以进行身份比较,并且枚举自身也可迭代。
主要包含:
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)) #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: 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)) #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 : FOUR -> THREE
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)