两种方式定义枚举类:

1、直接使用Enum列出多个枚举值来创建枚举类。

2、通过集成Enum基类派生枚举类。

程序示范:

1、直接使用Enum列出多个枚举值来创建枚举类。

from enum import Enum
#定义Month枚举类
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

上面的代码使用Enum()函数来创建枚举类,该方法第一个参数:枚举类的类名;第二个参数:元组,用于列出所有枚举值。

通过枚举值访问每个枚举元素,每个元素都有name,value两个属性,其中name属性值为该枚举值的变量名,value代表该枚举值的序号(序号通常从1开始)。

# 遍历Month所有成员
for member in Month:
print(member.name, member.value) # 直接使用枚举
print(Month.Jan) # Month.Jan
print(Month.Jan.name) # Jan
print(Month.Jan.value) # # 通过枚举变量名或枚举值来访问指定枚举对象
print(Month['Jan']) # Month.Jan
print(Month(1)) # Month.Jan

此外 python 还为枚举提供了一个__members__属性,该属性返回一个dict字典,字典包含了该枚举的所有枚举实例。

# 遍历Month枚举的所有成员
for name, member in Month.__members__.items():
print(name, '=>', member, ',', member.value) 输出:
Jan => Month.Jan , 1
...

2、通过继承 Enum 来派生枚举类,定义复杂的枚举

from enum import Enum, unique

@unique
class Weekday(Enum):
Sun = 0 # Sun的value被设定为0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6

@unique装饰器可以帮助我们检查保证没有重复值。

若是不加@unique装饰器,枚举成员名允许重复。

访问这些枚举类型可以有若干种方法:

print(Weekday.Tue)       # Weekday.Tue
print(Weekday['Tue']) # Weekday.Tue
print(Weekday.Tue.value) #
print(Weekday(1)) # Weekday.Mon

python3 枚举enum定义和使用的更多相关文章

  1. python3 枚举定义和使用

    定义 在某些情况下,一个类的对象是有限且固定的,比如季节类,它只有 4 个对象:再比如行星类,目前只有 8 个对象.这种实例有限且固定的类,在 Python 中被称为枚举类.程序有两种方式来定义枚举类 ...

  2. C语言学习015:联合(union)与枚举(enum)

    联合 联合和结构的区别是,结构会为每个字段申请一片内存空间,而联合只是申请了一片内存空间然后所有字段都会保存到这片空间中,这片空间的大小由字段中最长的决定,下面我们就开始定义一个联合 //联合的定义 ...

  3. 又爱又恨系列之枚举enum

    其实枚举挺简单的,只不过以前没好好学,所以不知道这个东西,恩,现在梳理一下 整体而言,首先枚举是一个数据类型,这个数据类型和结构体有点像 可以分为三个层次 1.枚举数据类型定义 第一种:enum 枚举 ...

  4. [未完成]关于枚举(Enum)

    今天总结一下枚举相关的知识.先附一段关于枚举的代码: package org.talend.core.model.param; import org.talend.core.i18n.Messages ...

  5. 枚举 enum

    typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...

  6. 【 枚举 Enum 】循环 名称与值

      foreach (WeekDay c in (WeekDay [])Enum.GetValues(typeof(WeekDay ))) {Console.Write(String.Format(& ...

  7. Python 的枚举 Enum

    枚举是常用的功能,看看Python的枚举. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May' ...

  8. iOS enum 定义与使用

    枚举其实很重要,特别是在应用开发初期,服务器端数据格式需要更改得情况下,枚举和宏都能是程序简洁,并且改动小. 网上有个人写的言简意赅,适合初学 转自:http://blog.csdn.net/ysy4 ...

  9. 枚举enum学习小记

    参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...

随机推荐

  1. opengl 4.5 中文api 链接

    https://www.cnblogs.com/wiki3d/p/opengl_a.html

  2. Git学习笔记08-远程仓库

    因为想在家里和公司都能用到一套代码,所以选择上传到github,记录一下使用经验. 需要安装git,和注册github 以下操作是第一次将自己的代码上传到GitHub上 1)创建github项目 1. ...

  3. pipenv安装报错ReadTimeoutError

    原因:pip下载源默认设置为国外 解决:将pip下载源切换为国内地址 操作: 在C:\Users\Administrator\下新建pip文件夹,在创建pip.ini文件,拷贝下面代码进去,保存 切换 ...

  4. ocr 识别 字体大小问题?

    字体大 字体小?????? ???????????

  5. this关键词详解

    当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this. 因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this ...

  6. http文件服务器上传与下载功能

    https://www.cnblogs.com/liferecord/p/4843615.html

  7. zhengrui集训D1-D5笔记

    Day_1 计数 它咕掉了 Day_1 序列数据结构 它咕掉了 Day_2 线性代数 高斯消元\Large{高斯消元}高斯消元 普通版:略 模质数:求逆 模合数:exgcd 逆矩阵\Large{逆矩阵 ...

  8. 5、获取Class中的字段

    5.获取Class中的字段 5.1 getField(String name) 只获取共有的字段 返回一个 Field对象,它反映此表示的类或接口的指定公共成员字段 类对象. /** * 获取字节码文 ...

  9. 第八章 用SQL语句操作数据

    --切换数据库:手动切换和命令切换 use MySchool --向Student表中插入数据 --语法:INSERT [INTO] 表名 (列名) VALUES (值列表) --注意事项: --1. ...

  10. AtomicInteger如何保证线程安全以及乐观锁/悲观锁的概念

    众所周知,JDK提供了AtomicInteger保证对数字的操作是线程安全的,线程安全我首先想到了synchronized和Lock,但是这种方式又有一个名字,叫做互斥锁,一次只能有一个持有锁的线程进 ...