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

  • 相关阅读:
    3.1 创建模型-实体属性
    3. 创建模型
    2.1 DbContext
    2. EF Core 如何显示执行的SQL语句
    1.1 为现有数据库生成实体模型
    1. EF Core 概述
    【2020-08-01】人生十三信条
    【一句日历】2020年8月
    【2020-07-31】一个像我一样精力充沛的孩子
    【2020-07-30】强大内心是自己的义务
  • 原文地址:https://www.cnblogs.com/saolv/p/8737333.html
Copyright © 2011-2022 走看看