zoukankan      html  css  js  c++  java
  • python 枚举

    枚举有一个便捷的定义方式

    from enum import Enum  
      
    WeekEnd = Enum('WeekEnd', ('Mon','Tues','Wed','Thurs','Fri','Sat','Sun'))

    上述例子,定义一个枚举类型 WeekEnd,并指定这个枚举类型的类标识也是'WeekEnd'(保持一致)(第二个WeekEnd为类标识。)。默认枚举成员的整数值member.value从1开始(如果不指定的话)。

    枚举一旦创建好了,成员的name和value就都不可变更了

    枚举成员member包含两个属性,一个是name,一个是value。其中,name不允许重复,如果用unique修饰了枚举类的话,则value也不允许重复

     如果需要更精确地控制枚举类型,比如让成员的value不从1开始,而是从0开始,可以从Enum派生出自定义类:

     1 from enum import Enum,unique  
     2  
     3 @unique 
     4 class WeekEnd(Enum):  
     5     Sun = 0  
     6     Mon = 1  
     7     Tue =2  
     8     Wed = 3  
     9     Thu = 4  
    10     Fri = 5  
    11     Sat =6    
    12 
    13 print(WeekEnd.Mon)#WeekEnd.Mon等同于WeekEnd['Mon']和WeekEnd(1),都是表示Mon这个member
    14 print(WeekEnd.Mon.value) #1
    15 print(WeekEnd.Mon.name) #Mon
    16  

    如果枚举中存在相同值的成员,在通过值获取枚举成员时,只能获取到第一个成员,第二个成员的名称被视作第一个成员的别名 

    1 from enum import Enum
    2 
    3 class Color(Enum):
    4     red = 1
    5     red_alias = 1
    6 
    7 print(Color(1))

    输出结果为:Color.red

    与Enum相似的还有一个intEnum,如果我们定义的枚举继承自intEnum而不是Enum,则value只能是数字

    枚举支持迭代:

    1 class Color(Enum):
    2     red = 1
    3     red_alias = 1
    4     blue = 2
    5 for color in Color:
    6     print (color)

    输出结果

    Color.red

    Color.blue

    上面例子,枚举有值重复的成员,循环遍历枚举时只获取值重复成员的第一个成员

    如果想把值重复的成员也遍历出来,要用枚举的一个特殊属性__members__

    for name,member in Color.__members__.items():
        print(name,member)

    输出结果:

    red Color.red

    red_alias Color.red

    blue Color.blue

    成员可以进行同一性,等值比较,但不能进行大小比较

    print (Color.red is Color.red_alias)#true
    print (Color.red == Color.red_alias)#true
    Color.red < Color.blue#语法错误

     最后一点,由于枚举成员本身也是枚举类型,因此也可以通过枚举成员找到其它成员:

    Color.blue等同于Color.red.blue

  • 相关阅读:
    不可或缺 Windows Native (15)
    不可或缺 Windows Native (14)
    不可或缺 Windows Native (13)
    不可或缺 Windows Native (12)
    不可或缺 Windows Native (11)
    不可或缺 Windows Native (10)
    不可或缺 Windows Native (9)
    不可或缺 Windows Native (8)
    不可或缺 Windows Native (7)
    不可或缺 Windows Native (6)
  • 原文地址:https://www.cnblogs.com/saolv/p/8737333.html
Copyright © 2011-2022 走看看