美文网首页Python
Python基础-23枚举

Python基础-23枚举

作者: Surpassme | 来源:发表于2022-07-31 23:51 被阅读0次

23 枚举

    枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。

23.1 使用普通类实现枚举类

class basicWeek():
    SUN=0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=6

# 获取值
print(basicWeek.SUN) # 0

    虽然这样也可以实现,但不严谨,也不安全,原因如下所示:

  • 枚举类中,不允许存在相同的枚举项(类变量)
  • 不允许在类外面直接修改枚举项的值
class basicWeek():
    SUN=0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=6
    SUN=7 # 这里会覆盖前面已经定义的值

# 获取值
print(basicWeek.SUN) # 7
# 在外面修改值
basicWeek.SUN=99
# 再次获取的值为修改后的值
print(basicWeek.SUN) # 99

    为了解决这种问题,我们引入枚举类

23.2 枚举类

    在Python中使用枚举类,可以引入内置模块Enum,如下所示:

from enum import Enum

class EnumWeek(Enum):
    SUN = 0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=6

print(EnumWeek.SUN) # EnumWeek.SUN
print(type(EnumWeek.SUN)) # <enum 'EnumWeek'>
print(EnumWeek.SUN.value) # 0
print(EnumWeek(5)) # EnumWeek.FRI
print(type(EnumWeek.SUN.value)) # <class 'int'>
print(EnumWeek.SUN.value == 0) # True
print(EnumWeek.SUN == EnumWeek2.SUN) # False
print(EnumWeek.SUN == EnumWeek.SUN) # True
print(EnumWeek.SUN is EnumWeek2.SUN) # False
print(EnumWeek.SUN is EnumWeek.SUN) # True

    使用枚举类注意事项如下所示:

  • 枚举类不能用来实例化对象
  • 访问枚举类中的项,直接使用类名.访问项,如EnumWeek.SUN
  • 枚举类中定义的key=value,在类外部不允许修改
  • 枚举类可以用来==、is来进行比较
  • 枚举类允许有多个名称作为某个相同值的别名
from enum import Enum

class EnumWeek(Enum):
    SUN = 0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=0

print(EnumWeek.SAT) # EnumWeek.SUN
  • 如果不允许枚举类出现相同值的时,可以使用装饰器@unique
from enum import Enum,unique

@unique
class EnumWeek(Enum):
    SUN = 0
    MON=1
    TUE=2
    WED=3
    THU=4
    FRI=5
    SAT=0

    输出结果如下所示:

Traceback (most recent call last):
  File "C:\Users\admin\Documents\PyCharmProjects\MyPythonProjects\LearningCode\LearningEnum.py", line 4, in <module>
    class EnumWeek(Enum):
  File "D:\Program Files\Python\lib\enum.py", line 1013, in unique
    raise ValueError('duplicate values found in %r: %s' %
ValueError: duplicate values found in <enum 'EnumWeek'>: SAT -> SUN
  • 使用自动设定的值
from enum import Enum,unique,auto

@unique
class EnumWeek(Enum):
    SUN = auto()
    MON=auto()
    TUE=auto()
    WED=auto()
    THU=auto()
    FRI=auto()
    SAT=auto()

print(EnumWeek.SAT.value) # 7
print(EnumWeek.WED.value) # 4
  • 枚举类是允许迭代的
from enum import Enum,unique,auto

@unique
class EnumWeek(Enum):
    SUN = auto()
    MON=auto()
    TUE=auto()
    WED=auto()
    THU=auto()
    FRI=auto()
    SAT=auto()

for week in EnumWeek:
    print(f"week is {week}:{week.value}")

    输出结果如下所示:

week is EnumWeek.SUN:1
week is EnumWeek.MON:2
week is EnumWeek.TUE:3
week is EnumWeek.WED:4
week is EnumWeek.THU:5
week is EnumWeek.FRI:6
week is EnumWeek.SAT:7

相关文章

  • Python基础-23枚举

    23 枚举     枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的、不可变的。 23.1 使用普通类实...

  • python基础 -- 枚举Enum

    1. 作用 列举常量,例如月份,周数 2. 操作

  • Java基础方法12(枚举)

    17.1.枚举类型 文集推荐: Java基础方法集1Python基础知识完整版Spring Boot学习笔记Lin...

  • Swift 2 学习笔记 10.枚举

    课程来自慕课网liuyubobobo老师 枚举 枚举基础 枚举之原始值 枚举之关联值 枚举递归

  • 枚举基础

    枚举定义 枚举类里的值必须是有限个的,确定的。 枚举类是一组常量。 如果枚举类只有一个对象,则可以作为一个单例的实...

  • java枚举

    1.枚举定义 声明枚举 声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举...

  • Python枚举

    https://www.cnblogs.com/ucos/p/5896861.html

  • Python枚举

    1. 枚举类型、枚举名称与枚举值 枚举优点: 不可更改性, 不可重复性 2. 枚举比较 枚举只能进行等于比较不能进...

  • python 枚举

  • TypeScript基础入门 - 枚举 - 异构枚举和枚举成员

    转载 TypeScript基础入门 - 枚举 - 异构枚举和枚举成员 项目实践仓库 为了保证后面的学习演示需要安装...

网友评论

    本文标题:Python基础-23枚举

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