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

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读