常量是任何一门语言中都会使用的一种变量类型

如 要表示星期常量,我们可能会直接定义一组变量

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的更多相关文章

  1. Python 枚举 enum

    Python 枚举 enum enum 标准模块在 3.4 版本才可以使用,3.3 以下版本需要独立安装:https://pypi.python.org/pypi/enum34#downloads,官 ...

  2. python 枚举Enum类的使用

    1. 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 示例代码: from enum import Enum class Color(Enum): red ...

  3. 关于python中Enum的个人总结

    关于python中Enum的个人总结 初识 可以通过enum模块导入 语法 初始化: 可以通过enum_ = Enum('class_name', names,start = 1)来创建,其中name ...

  4. MySQL字段之集合(set)枚举(enum)

    MySQL字段之集合(set)枚举(enum) (2008-12-23 13:51:23) 标签:it  分类:MySQL 集合 SET mysql> create table jihe(f1 ...

  5. 枚举 enum

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

  6. 枚举enum学习小记

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

  7. Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法 来源 https://blog.csdn.net/qq_27093465/article/details/52180865 JDK1.5引入了新的类型— ...

  8. 【转】结构struct 联合Union和枚举Enum的细节讨论

    结构struct 联合Union和枚举Enum的细节讨论 联合(Union)是一种构造数据类型,它提供了一种使不同类型数据类型成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换 ...

  9. 枚举Enum和常量0之间的恩怨

    1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...

随机推荐

  1. 利用Sklearn实现加州房产价格预测,学习运用机器学习的整个流程(包含很多细节注解)

    Chapter1_housing_price_predict .caret, .dropup > .btn > .caret { border-top-color: #000 !impor ...

  2. 【响应式编程的思维艺术】 (1)Rxjs专题学习计划

    目录 一. 响应式编程 二. 学习路径规划 一. 响应式编程 响应式编程,也称为流式编程,对于非前端工程师来说,可能并不是一个陌生的名词,它是函数式编程在软件开发中应用的延伸,如果你对函数式编程还没有 ...

  3. Predicate--入门简介

    说明:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. var predicate = new Predicate&l ...

  4. xdebug配置

    [XDebug] ;指定性能分析文件的存放目录 xdebug.profiler_output_dir="D:\phpStudy\tmp\xdebug" xdebug.trace_o ...

  5. C# Word文档中插入、提取图片,文字替换图片

    Download Files:ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操作.图像会比阅读文字更有吸引力,而且图像是 ...

  6. Java开发笔记(十三)利用关系运算符比较大小

    前面在<Java开发笔记(九)赋值运算符及其演化>中提到,Java编程中的等号“=”表示赋值操作,并非数学上的等式涵义.Java通过等式符号“==”表示左右两边相等,对应数学的等号“=”: ...

  7. vue关闭代码检查eslint

    confing/index.js 文件里面的 useEslint 改成false就可以关闭代码检查了   不过为了代码的规范性,不建议关闭!

  8. Chrome 插件——二维码生成笔记

    原来用了几个生成二维码的插件,总是遇见各种问题……最后索性自己弄一个,这里顺便记录一下. Chrome 插件很开放!!!你只要拿到了crx文件,然后把文件的后缀名改为zip,就可以解压了,最后一切的一 ...

  9. android java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout

    造成这个问题的原因是在xml文件中出现了重复依赖,何为重复依赖,如下:   以上便叫重复依赖 转载请标明出处:http://www.cnblogs.com/tangZH/p/8386978.html

  10. (简单)华为荣耀9i LLD-AL20的Usb调试模式在哪里开启的方法

    每当我们使用pc通过数据线连接上安卓手机的时候,如果手机没有开启Usb开发者调试模式,pc则没法成功检测到我们的手机,有时,我们使用的一些功能较好的应用如以前我们使用的一个应用引号精灵,老版本就需要开 ...