首页 > 编程语言 >python枚举类型Enum

python枚举类型Enum

时间:2023-12-25 17:58:16浏览次数:32  
标签:MONDAY python TUESDAY Enum 枚举 Weekday print SATURDAY

  在 Python 中,枚举类型可以通过 enum 模块来实现。enum 模块提供了 Enum 类,用于创建具有命名值的枚举类型。枚举类型的创建方式包括使用类定义、使用函数和使用装饰器。

1.定义一个枚举类

from enum import Enum

class Weekday(Enum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7

  通过使用枚举,我们可以清晰地表示星期的每一天,避免了使用数字或字符串来表示。

2.输出与遍历输出

#输出
print(Weekday)#<enum 'Weekday'>
print(Weekday.MONDAY)#Weekday.MONDAY
print(Weekday.MONDAY.name)#MONDAY
print(Weekday.MONDAY.value)#1

#遍历输出
for day in Weekday:
    print(day)
'''
Weekday.MONDAY
Weekday.TUESDAY
Weekday.WEDNESDAY
Weekday.THURSDAY
Weekday.FRIDAY
Weekday.SATURDAY
Weekday.SUNDAY
'''

3.比较枚举成员

class Weekday(Enum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    SATURDAY = 6

print(type(Weekday.WEDNESDAY))#<enum 'Weekday'>
today=Weekday.SATURDAY
print(type(today))#<enum 'Weekday'>

# 比较枚举成员
if today == Weekday.WEDNESDAY:
    print("It's SATURDAY!")

print(type(Weekday.SATURDAY.value))#<class 'int'>
print(Weekday.SATURDAY.value)#6

#或者
if 6==Weekday.SATURDAY.value:
    print(Weekday.SATURDAY.value)#6

  实际上判断两个枚举类型是否相等时,是按其值去比较的,假设我们在类中定义MONDAY=1 TUESDAY=1,那么Weekday.MONDAY==Weekday.TUESDAY是成立的。

4.相同枚举值的处理

  在枚举类中,可以有相同值,但是后面的枚举项都是第一个的别名。

class Weekday(Enum):
    MONDAY = 1
    TUESDAY = 1
    WEDNESDAY = 3

print(Weekday.MONDAY)#Weekday.MONDAY
print(Weekday.TUESDAY)#Weekday.MONDAY

5.装饰器@unique

from enum import unique
@unique
class Weekday(Enum):
    MONDAY = 1
    TUESDAY = 1
    WEDNESDAY = 3

print(Weekday.MONDAY)#报错ValueError: duplicate values found in <enum 'Weekday'>: TUESDAY -> MONDAY

6.auto()函数的使用

  使用 auto() 函数可以让 Enum 自动为成员分配唯一的值。

from enum import Enum, auto

class Weekday(Enum):
    MONDAY = auto()
    TUESDAY = auto()
    WEDNESDAY = auto()
    THURSDAY = auto()
    FRIDAY = auto()
    SATURDAY = auto()
    SUNDAY = auto()


for day in Weekday:
    print(day.name,'=',day.value)

'''
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
'''

 

小结:注意无论我们是否加@unique装饰器,我们的枚举类型的name都是不能重复的,比如在类中不能出现MONDAY=1 MONDAY=2;另外,多说一句,我们这里定义的python类中的成员为类成员,可以直接类名.属性名访问的。

 

  若存在不足或错误之处,欢迎指出与点评!

标签:MONDAY,python,TUESDAY,Enum,枚举,Weekday,print,SATURDAY
From: https://www.cnblogs.com/wancy/p/17926622.html

相关文章

  • Python描述符
    1、描述符定义先看下描述符的定义。如果在一个新式类中至少实现了__get__(),__set__(),__delete__()中的一个,则称作这个的新式类为描述符,也称为描述符协议。__get__():调用一个属性时触发;__set__():一个属性赋值时触发;__delete__():采用del删除属性时触发;......
  • Python 爬虫在数据分析方面有什么潜力
    在当今信息爆炸的时代,大量的数据被生成和存储,这给企业、学术界和个人提供了巨大的机会和挑战。爬虫作为一种数据获取的技术手段,可以帮助我们从互联网上获取大量的数据。结合数据分析技术,爬虫在数据分析方面具有巨大的潜力。本文将介绍一些爬虫在数据分析方面的潜力和应用场景。1.获......
  • python的任何题目开头加上一句class的语句就是面向对象程序设计吗
    Python的任何题目开头加上一句class的语句并不意味着是面向对象程序设计(Object-OrientedProgramming,OOP)。面向对象程序设计是一种编程范式,它将程序组织为对象的集合,每个对象都有自己的状态和行为,并且可以与其他对象进行交互。在Python中,使用class关键字可以定义类,类是对象的蓝图,描......
  • 如何将 python 升级
    要升级Python,您可以采取以下步骤:备份数据:在进行升级之前,建议备份您的Python项目和数据以防万一。选择Python版本:决定要升级到的Python版本。访问Python官方网站,查看可用的稳定版本。下载新版本:使用以下命令下载并安装您选择的Python版本。请替换x.y.z为实际的版本号。......
  • python Django项目在jenkins中部署
    1.在jenkins中创建一个自由风格的job: 配置git源代码仓库:构建机制的配置: 配置执行shell脚本: ps-ef|grep0.0.0.0:8088|grep-vgrep|awk'{print$2}'|xargskill-9echo"=============Finishtokillreleasewikirealprocess=================="BUIL......
  • Python - pandas 报错:ValueError: 'HIS_批准文号' is both an index level and a colu
    问题描述file:[Terminal]ValueError:'HIS_批准文号'isbothanindexlevelandacolumnlabel,whichisambiguous.ValueError:cannotinsert招采_批准文号,alreadyexists有这两个错误,使用函数merge合并的时候出现第一个错误,将两个DataFrame的索引reset_index......
  • Windows环境 CMake 配置C++调用Python
    #CMakeLists.txtadd_library(python3STATICIMPORTED)#这里是使用python的安装路径set_target_properties(python3PROPERTIESIMPORTED_LOCATION"D:/python/libs/python39.lib")#使用python的静态库target_link_libraries(TestDemo......
  • Python——第五章:csv模块
    未来我们会使用爬虫获取到一些json文件,例如去英雄联盟官方爬取英雄的数据库查看代码{"hero":[{"heroId":"1","name":"\u9ed1\u6697\u4e4b\u5973","alias":"Annie","title":"\u5b89\u59ae","roles"......
  • python3 多线程ping当前网段主机是否存活
    1.python3多线程#主线程只负责生成工作线程#工作线程只做具体的工作#多线程共享进程里的内存块#多进程不共享importthreadingdefHello(world,tedu):print('Hello%s%s!'%(world,tedu))if__name__=='__main__':foriinrange(3):th......
  • 【Mathematical Model】Python拟合一元一/二次方程(线性回归)
    ​        Python中可以使用多种库进行拟合方程,其中最常用的是NumPy和SciPy。NumPy是一个用于处理数组和矩阵的库,而SciPy则提供了大量的科学计算函数,包括拟合算法。1一元一次方程拟合    需要注意的是我们这里的方程需要我们自己定义好,然后再通过curve_fit......