python 枚举Enum
常量是任何一门语言中都会使用的一种变量类型
如 要表示星期常量,我们可能会直接定义一组变量
JAN = 1
TWO = 2
...
然后在返回给前端的时候,我们返回的就会是1,2,...这种魔法数字,导致后来的人阅读起来很麻烦。
在python中,为了代码的可读性和简洁性,更建议使用枚举类型
1、枚举类型的定义:
from enum import Enum
1)可以通过传入cls_name和一个可迭代对象来定义
传入list列表
week= Enum("Week", (["JAN", "TUE",... ]))
传入tuple元组
week = Enum("Week", ("JAN", "TUE"))
传入字典
week= Enum("Week", ({"JAN":"1", "TUE":"2"}))
传入string字符串
week= Enum("Week", "JAN TUE")
2)定义一个类,继承Enum
class Week(Enum):
JAN = 1
TUE = 2
2、枚举类型定义注意事项:
1)成员名称不能重复, 如果使用相同的key,会报错 Attempted to reuse key
2)不同成员的值允许相同,但是对于相同的值的成员,第二个成员名被看做第一个成员名的别名,在遍历的时候,只会遍历出其中一个成员
通过值回去枚举成员时,也只能获取一个
3)如果要限制枚举的值不能重复,可以使用装饰器@unique
使用了@unique装饰器,如果值出现重复,会报错:duplicate values
3、枚举取值
1)通过成员名称来取成员
week.TUE/ week["TUE"] --->
week.TUE.name---->TUE
week.TUE.value---->2
2)通过值来获取成员
Week(2) ------>
Week(2).name---->Tue
Week(2).value---->2
3)遍历取值
for week in Week:
print(week)
前面说了,如果Week中有值重复的成员,那么遍历的时候,只会遍历出一个成员,但是如果想要把所有的成员都遍历出来呢?需要用到__members__属性
for week in Week.__members__.items():
print(week)
4)enum枚举类型比较
枚举成员可进行同一性比较
week.JAN is week.TUE---->False
week.JAN is not week.JAN---->False
枚举成员可进行等值比较
week.JAN.value == "1"--->True
week.JAN==week.JAN
5)枚举类型的应用:
【需求】现在做一个注册需求,1)可以通过邮箱密码注册 ;2)可以通过手机号验证码注册;
针对这个写一个登录API
【解析】针对不同的登录类型,传递给后端的字段是不一样的,如邮箱密码登录,需要传递邮箱和密码,手机号验证码登录,需要传递给后台手机号和验证码,所以需要针对不同的登录方式做不同的登录验证。
这个时候,我们可以使用枚举类型来完成这个需求。
1)定义一个枚举类
2)定义register方法
上面截图中,定义了一个promise字典,里面定义了针对不同注册类型的注册方法
然后根据前端传递过来的type值,对应的调用promise中的函数
这里的form.type.data 是枚举类型,并不是枚举值,在定义form验证的时候,将枚举类型赋值给了type.data,所以可以直接使用promise[form.type.data]调用
python 枚举Enum的更多相关文章
- Python 枚举 enum
Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...
- python 枚举Enum类的使用
1. 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 示例代码: from enum import Enum class Color(Enum): red ...
- 关于python中Enum的个人总结
关于python中Enum的个人总结 初识 可以通过enum模块导入 语法 初始化: 可以通过enum_ = Enum('class_name', names,start = 1)来创建,其中name ...
- MySQL字段之集合(set)枚举(enum)
MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it 分类:MySQL 集合 SET mysql> create table jihe(f1 ...
- 枚举 enum
typedef enum : NSUInteger { <#MyEnumValueA#>, <#MyEnumValueB#>, <#MyEnumValueC#>, ...
- 枚举enum学习小记
参考文献: [1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社 [2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民邮电出版社 ...
- Java 枚举(enum) 详解7种常见的用法
Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...
- 【转】结构struct 联合Union和枚举Enum的细节讨论
结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...
- 枚举Enum和常量0之间的恩怨
1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...
随机推荐
- webpack4.0各个击破(7)—— plugin篇
webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...
- 第5章 支持和咨询选项 - Identity Server 4 中文文档(v1.0.0)
我们为IdentityServer提供了多种免费和商业支持和咨询选项. 5.1 免费支持 免费支持是基于社区的,并使用公共论坛 5.1.1 StackOverflow StackOverflow 社区 ...
- .net -笔记 简单的操作符重载
这个操作符重载很有意思 class Program { static void Main(string[] args) { Person person1 = new Person() { Name = ...
- 用python爬取杭电oj的数据
暑假集训主要是在杭电oj上面刷题,白天与算法作斗争,晚上望干点自己喜欢的事情! 首先,确定要爬取哪些数据: 如上图所示,题目ID,名称,accepted,submissions,都很有用. 查看源代码 ...
- css中关于table的相关设置
一.设置好看的单边框表格 1.一种实现方式 分别给table标签和td标签设置不在同一方向的border属性,如下table设置‘左上’边框,td设置‘右下’边框.其他设置方式同样可以实现. tabl ...
- TextView图文混排
大家都知道,textView有一个setCompoundDrawables的方法来设置上下左右位置的图标,当然,也可以在xml布局文件中设置,然而问题来了,假如我们把图标放在左边,当我们让TextVi ...
- Activity的启动流程
前言:新启动一个activity分为两种情况,第一种是在Launcher的桌面点击icon图标启动一个新的应用,第二种是在应用启动的情况下从OneActivity->TwoActivity 其实 ...
- FormData 对象上传二进制文件
使用jQuery 利用 FormData 上传文件:http://harttle.com/2016/07/04/jquery-file-upload.html 通过FormData对象可以组装 ...
- maven springTest结合junit单元测试
1.引入相关依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifac ...
- Python列表之班荆道故
列表list初识 列表是python的基础数据类型之一 ,它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型: list列表的定义: list_ = []list_1 = [&qu ...