Python3.4 枚举类型的使用
From: https://majing.io/posts/10000005131196
枚举类型是在Python3.4新增到Python的标准库。
创建枚举
Python提供了两种方法来创建枚举:
- 基于class语法创建枚举
- 基于Function API创建枚举
创建枚举首先要导入Enum类
>>> from enum import Enum
基于class语法创建枚举
示例
>>> from enum import Enum
>>> class Color(Enum):
... red = 1
... green = 2
... blue = 3
示例定义以下内容:
- 定义了Color的枚举类型。
- 定义了枚举类型Color的枚举成员:Color.red,Color.green,Color.blue。
- 给每一个枚举成员赋值,如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开始自动递增。
- 使用字典表示,字典可以指定枚举成员的值,其中字典的键位枚举成员名,值为枚举成员的值。
使用字典声明示例
>>>from enum import Enum
>>>Color = Enum('Color',{'red':1,'green':2,'blue':4})
访问枚举成员
访问枚举成员有三种方式:
- 使用点号(".")引用
- 使用value获取,值对应的枚举成员
- 使用枚举成员名
按值访问
>>>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 = 1
happy = 3
def describe(self):
# self为枚举成员
return self.name, self.value
def __str__(self):
return 'my custom str! {0}'.format(self.value)
@classmethod
def 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已定义了枚举成员,不允许扩展。
Python3.4 枚举类型的使用的更多相关文章
- Python3基础系列——枚举类型大揭秘
为什么使用枚举 枚举类型是定义常量的一种最优选择. 常量的广义概念是:不变化的量 对于常量的通俗比喻--如同大山不被轻而易举地改变 地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的 ...
- Asp.Net 将枚举类型(enum)绑定到ListControl(DropDownList)控件
在开发过程中一些状态的表示使用到枚举类型,那么如何将枚举类型直接绑定到ListControl(DropDownList)是本次的主题,废话不多说了,直接代码: 首先看工具类代码: /// <su ...
- golang枚举类型 - iota用法拾遗
在c#.java等高级语言中,经常会用到枚举类型来表示状态等.在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手. 1.枚举类型定义 从百度百科查询解释如下:http://baike ...
- 第三条:用私有构造器或者枚举类型强化Singleton属性
1.使用单元素的枚举类型 public enum Singleton implements Serializable { INSTANCE; private String field; public ...
- 在WPF中使用变通方法实现枚举类型的XAML绑定
问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...
- 窥探Swift之别样的枚举类型
想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了.Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性.在 ...
- C#枚举类型的常用操作总结
枚举类型是定义了一组"符号名称/值"配对.枚举类型是强类型的.每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueTy ...
- TypeScript中的枚举类型
TypeScript拓展了Javascript原生的标准数据类型集,增加了枚举类型(enmu)和其他语言一 样 它提供我们一种数字类型的值,用来设置由于辨别的名字和方法 enum Students { ...
- Python 中的枚举类型~转
Python 中的枚举类型 摘要: 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. 枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表 ...
随机推荐
- linux之关于学习必备知识
文件列表的定义: 第一个字符表示文件类型 d为目录 -为普通 1为链接 b为可存储的设备接口 c为键盘鼠标等输入设备 2~4个字符表示所有者权限,5~7个字符表示所有者同组用户权限,8~10 ...
- Java课程----自我介绍
我是一名信息院的学生,今年今日是大二下学期,马上就要大三了,自己对于专业的认知还是太浅.主要是因为之前的大学生活特别懒散,并不积极向上.但是我想说的是,我们大学生,一定不要碌碌无为,要有所作为.我 ...
- centos6.5安装Mysql5.6及更改密码
(一) centos6.5安装Mysql5.6 二进制文件安装的方法分为两种: 第一种是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件: 第二种是使用RPM或其他包进行 ...
- 2018-计算机系机试(第二批)-A-最大数
单点时限: 1.0 sec 内存限制: 256 MB 输入 n 个整数,输出其中最大数的值. 例如:3 个整数 1 ,2 和 6 的最大值是 6 . 输入格式 每一行的第一个数是 n (1≤n≤20 ...
- 使用flask+SQL语句实现通过前台收到的信息向数据库中插入事件+初级CSS+HTML拯救一下我的主页·····
1.使用flask+SQL语句实现**#@&&(懒得再扣一遍题目) 上代码: @app.route('/register', methods=['POST', 'GET']) def ...
- Ubuntu和Linux的区别
大家听别人介绍自己的Ubuntu时,会听到“我的操作系统是Linux的”.其实,这样介绍是缺乏严谨性滴.我们只要知道两点,基本上就搞清楚Linux和Ubuntu的关系: 1. 严格来说,Linu ...
- iOS保持待续连接
当iphone应用程序进行网络编程时,切到后台后,socket连接会断掉,ios的设计就是这样. 但是好在apple公司也没有那么绝,还是有一些东西可以在后台运行的(backgroundmodes), ...
- linux执行python的脚本文件,提示提示No such file or directory
在window平台下,写好python脚本文件,迁移到linux平台,赋过可执行权限,执行该sh文件,却提示No such file or directory.ls 了下,确实有该文件,怎么会事呢, ...
- AI五子棋需求规格说明书
AI-Gobang AI五子棋小程序 github地址:https://github.com/holidaysss/AI-Gobang 程序简介 AlphaGo Zero在世界舞台上取得的巨大成功体现 ...
- 固态硬盘Ghost安装Windows 10无法引导的问题
机器配置如下: 电脑型号 技嘉 B360M POWER 台式电脑 操作系统 Windows 10 64位 ( DirectX 12 ) 处理器 英特尔 Core i7-8700 @ 3.20GHz 六 ...