From: https://majing.io/posts/10000005131196

枚举类型是在Python3.4新增到Python的标准库。

创建枚举

Python提供了两种方法来创建枚举:

  1. 基于class语法创建枚举
  2. 基于Function API创建枚举

创建枚举首先要导入Enum类

>>> from enum import Enum

基于class语法创建枚举

示例

>>> from enum import Enum
>>> class Color(Enum):
...     red = 1
...     green = 2
...     blue = 3

示例定义以下内容:

  1. 定义了Color的枚举类型。
  2. 定义了枚举类型Color的枚举成员:Color.red,Color.green,Color.blue。
  3. 给每一个枚举成员赋值,如Color.red的值为1。需要注意的是枚举成员的值可以指定为其他类型,没有强制要求是整型。

枚举成员包含了两个属性:name和value

>>>Color.red.name
red
>>>Color.red.value
1

定义字符串类型的值

>>> from enum import Enum
>>> class Color(Enum):
...     red = 'r'
...     green = 'g'
...     blue = 'b'

基于Function API创建枚举

上面基于class创建枚举的示例用Function API可以改写为

>>>from enum import Enum
>>>Color = Enum('Color','red green blue')
>>>list(Color)
[<Color.red:1>,<Color.green:2>,<Color.blue:3>]

Enum函数第一个参数为枚举名。第二个参数为枚举成员列表。

第二个参数表示的枚举成员列表有三种方式:

  1. 使用字符串表示,各成员名使用空格隔开。成员的值从1开始自动递增。
  2. 使用元组表示,成员的值从1开始自动递增。
  3. 使用字典表示,字典可以指定枚举成员的值,其中字典的键位枚举成员名,值为枚举成员的值。

使用字典声明示例

>>>from enum import Enum
>>>Color = Enum('Color',{'red':1,'green':2,'blue':4})

访问枚举成员

访问枚举成员有三种方式:

  1. 使用点号(".")引用
  2. 使用value获取,值对应的枚举成员
  3. 使用枚举成员名

按值访问

>>>Color(1)
<Color.red:1>

按枚举名访问

>>>Color['red']
<Color.red:1>

遍历枚举

枚举支持对它的成员进行遍历

list遍历

>>>list(Color)
[<Color.red:1>,<Color.green:2>,<Color.blue:3>]

for遍历

>>>for color in Color:
...  print(color)

枚举类型的比较

>>> Color.red is Color.red
True
>>> Color.red is Color.blue
False
>>> Color.red is not Color.blue
True

注意枚举成员并非整型,是不能做大小比较,如

>>> Color.red < Color.blue
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: unorderable types: Color() < Color()

只能做相等性比较

>>> Color.blue == Color.red
False
>>> Color.blue != Color.red
True
>>> Color.blue == Color.blue
True
>>> Color.blue == 2
False

定义枚举的方法

由于枚举类型也是一个class,所以也支持给枚举类型定义方法。

示例:

class Mood(Enum):funky = 1happy = 3def describe(self):# self为枚举成员return self.name, self.valuedef __str__(self):return 'my custom str! {0}'.format(self.value)@classmethoddef favorite_mood(cls):# cls为枚举类型return cls.happy

使用:

>>> Mood.favorite_mood()
<Mood.happy: 3>
>>> Mood.happy.describe()
('happy', 3)
>>> str(Mood.funky)
'my custom str! 1'

定义枚举的子类

定义枚举的子类需要满足:父枚举没有定义任何的枚举成员,此时才允许有子类。

>>> class MoreColor(Color):
...   pink = 17
...
TypeError: Cannot extend enumerations

这是由于Mood已定义了枚举成员,不允许扩展。

转载于:https://www.cnblogs.com/Raul2018/p/10526401.html

Python3.4 枚举类型的使用相关推荐

  1. python3.7如何使用enum_Python3.4 枚举类型的使用

    枚举类型是在Python3.4新增到Python的标准库. 创建枚举 Python提供了两种方法来创建枚举:基于class语法创建枚举 基于Function API创建枚举 创建枚举首先要导入Enum ...

  2. Python枚举类型的使用

    枚举类型是在Python3.4新增到Python的标准库. 创建枚举 Python提供了两种方法来创建枚举: 基于class语法创建枚举 基于Function API创建枚举 创建枚举首先要导入Enu ...

  3. python中枚举类型enum用法_Python枚举类型Enum用法详解

    实际开发中,我们离不开定义各种类型,当我们需要定义类型时,一般是通过一组整数来定义.比如:定义不同的月份 JAN 1 FEB 2 MAR 3 ... NOV 11 DEC 12 复制代码 大多数人想到 ...

  4. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  5. ASP.NET中绑定枚举类型

    在项目开发中好多地方用了枚举,要把枚举显示到下拉列表框中我们平常的方法就是在下拉列表控件中一个一个添加进去!这样做也行但如果我的枚举类型中的枚举值一旦改变,那么你就得满世界的去找然后再修改很麻烦. 这 ...

  6. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  7. C++ 枚举类型基本知识

    1.定义 enum <类型名> {<枚举常量表>}; 2.说明 关键字enum--指明其后的标识符是一个枚举类型的名字. 枚举常量表--由枚举常量构成.枚举常量只能以标识符形式 ...

  8. Java基础教程(15)--枚举类型

      枚举类型定义了一个枚举值的列表,每个值是一个标识符.例如,下面的语句声明了一个枚举类型,用来表示星期的可能情况: public enum Day {SUNDAY, MONDAY, TUESDAY, ...

  9. 【C++】枚举类型应用

    运行环境:VS2017 可以参考:[C++]枚举类型 医院内科有A,B,C,D,E,F,G共七位医生,每人在一周内要值一次夜班,排班的要求: (1)A比C晚一天 (2)D比E晚两天 (3)B比G早三天 ...

  10. 求你了,不要再在对外接口中使用枚举类型了!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛 ...

最新文章

  1. jquery treeview 树形插件
  2. Class与Style绑定
  3. 算法----------字符串的排列(Java版本)
  4. char N2Char(int n)函数:将一个整数转换为字符串,并放入一个字符串中
  5. UA MATH636 信息论9 Reed-Solomon Code
  6. Bootstrap 媒体对象
  7. php eval 二进制,PHP eval函数使用介绍
  8. 使用Swagger UI的Document和Test API
  9. 如何快速演变XMind文件
  10. Docker 大势已去,Podman 即将崛起!
  11. 安防监控芯片市场高清化趋势愈显 成行业共识
  12. Julia : Some, something, Nothing
  13. 天津麒麟正式更名为麒麟软件
  14. ESP8266-Arduino编程实例-BMI160惯性测量传感器驱动
  15. OpenCV-python安装教程
  16. 椭圆拟合fitEllipse()函数
  17. Java 求阴历(C++ 求阴历方法的转换)
  18. Linux(RHEL7及CentOS7)下DNS服务器的搭建与配置
  19. python整形怎么切片_遥感影像切分切片
  20. Omnibus GitLab 使用说明

热门文章

  1. 【备战春招/秋招系列】美团Java面经总结进阶篇 (附详解答案) 1
  2. 区块链 -- Merkle Tree
  3. LEADTOOLS构建HTML5 DICOM/PACS查看器
  4. 使用Eclipse插件DB viewer进行MySQL(SQL Server)等 数据库操作
  5. WF4.0 基础篇 (二十五)(补充) ActivityFunc 与 InvokeFunc
  6. IDM最强大的多线程下载器 Internet Download Manager v2021 中文版+超多皮肤
  7. react-native 添加 Toast 模块
  8. Linux 桌面版为什么打不过 Window?Linus 现身说法!
  9. MySQL 8.0 的 5 个新特性,太实用了!
  10. Java 8 异步 API、循环、日期,用好提高生产力!