ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python基础-23枚举 [打印本页]

作者: 忿忿的泥巴坨    时间: 2022-9-4 19:50
标题: Python基础-23枚举
23 枚举

    枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。
23.1 使用普通类实现枚举类
  1. class basicWeek():
  2.     SUN=0
  3.     MON=1
  4.     TUE=2
  5.     WED=3
  6.     THU=4
  7.     FRI=5
  8.     SAT=6
  9. # 获取值
  10. print(basicWeek.SUN) # 0
复制代码
    虽然这样也可以实现,但不严谨,也不安全,原因如下所示:
  1. class basicWeek():
  2.     SUN=0
  3.     MON=1
  4.     TUE=2
  5.     WED=3
  6.     THU=4
  7.     FRI=5
  8.     SAT=6
  9.     SUN=7 # 这里会覆盖前面已经定义的值
  10. # 获取值
  11. print(basicWeek.SUN) # 7
  12. # 在外面修改值
  13. basicWeek.SUN=99
  14. # 再次获取的值为修改后的值
  15. print(basicWeek.SUN) # 99
复制代码
    为了解决这种问题,我们引入枚举类
23.2 枚举类

    在Python中使用枚举类,可以引入内置模块Enum,如下所示:
  1. from enum import Enum
  2. class EnumWeek(Enum):
  3.     SUN = 0
  4.     MON=1
  5.     TUE=2
  6.     WED=3
  7.     THU=4
  8.     FRI=5
  9.     SAT=6
  10. print(EnumWeek.SUN) # EnumWeek.SUN
  11. print(type(EnumWeek.SUN)) # <enum 'EnumWeek'>
  12. print(EnumWeek.SUN.value) # 0
  13. print(EnumWeek(5)) # EnumWeek.FRI
  14. print(type(EnumWeek.SUN.value)) # <class 'int'>
  15. print(EnumWeek.SUN.value == 0) # True
  16. print(EnumWeek.SUN == EnumWeek2.SUN) # False
  17. print(EnumWeek.SUN == EnumWeek.SUN) # True
  18. print(EnumWeek.SUN is EnumWeek2.SUN) # False
  19. print(EnumWeek.SUN is EnumWeek.SUN) # True
复制代码
    使用枚举类注意事项如下所示:
  1. from enum import Enum
  2. class EnumWeek(Enum):
  3.     SUN = 0
  4.     MON=1
  5.     TUE=2
  6.     WED=3
  7.     THU=4
  8.     FRI=5
  9.     SAT=0
  10. print(EnumWeek.SAT) # EnumWeek.SUN
复制代码
  1. from enum import Enum,unique
  2. @unique
  3. class EnumWeek(Enum):
  4.     SUN = 0
  5.     MON=1
  6.     TUE=2
  7.     WED=3
  8.     THU=4
  9.     FRI=5
  10.     SAT=0
复制代码
    输出结果如下所示:
  1. Traceback (most recent call last):
  2.   File "C:\Users\admin\Documents\PyCharmProjects\MyPythonProjects\LearningCode\LearningEnum.py", line 4, in <module>
  3.     class EnumWeek(Enum):
  4.   File "D:\Program Files\Python\lib\enum.py", line 1013, in unique
  5.     raise ValueError('duplicate values found in %r: %s' %
  6. ValueError: duplicate values found in <enum 'EnumWeek'>: SAT -> SUN
复制代码
  1. from enum import Enum,unique,auto
  2. @unique
  3. class EnumWeek(Enum):
  4.     SUN = auto()
  5.     MON=auto()
  6.     TUE=auto()
  7.     WED=auto()
  8.     THU=auto()
  9.     FRI=auto()
  10.     SAT=auto()
  11. print(EnumWeek.SAT.value) # 7
  12. print(EnumWeek.WED.value) # 4
复制代码
  1. from enum import Enum,unique,auto
  2. @unique
  3. class EnumWeek(Enum):
  4.     SUN = auto()
  5.     MON=auto()
  6.     TUE=auto()
  7.     WED=auto()
  8.     THU=auto()
  9.     FRI=auto()
  10.     SAT=auto()
  11. for week in EnumWeek:
  12.     print(f"week is {week}:{week.value}")
复制代码
    输出结果如下所示:
  1. week is EnumWeek.SUN:1
  2. week is EnumWeek.MON:2
  3. week is EnumWeek.TUE:3
  4. week is EnumWeek.WED:4
  5. week is EnumWeek.THU:5
  6. week is EnumWeek.FRI:6
  7. week is EnumWeek.SAT:7
复制代码
原文地址:https://www.jianshu.com/p/391c9717525d
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4