美文网首页
Python:枚举

Python:枚举

作者: 玩转测试开发 | 来源:发表于2021-11-13 11:18 被阅读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
    

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

    相关文章

      网友评论

          本文标题:Python:枚举

          本文链接:https://www.haomeiwen.com/subject/rmgttrtx.html