• 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]调用

          

  • 相关阅读:
    Office Web Apps Server 2013与PDF(一)
    关于EF Unit of Work Repository的简单用法
    从3层开始
    使用ms owin 搭建oauth2 server
    让自己的程序支持livewriter
    angularjs 从外部改变controller内的数据
    vs2013 update 2 cordova(phonegap) 环境
    asp.net web api 跨域,带cookie
    c#与IronPython Clojure-clr的调用
    Mvc Moq HttpContext
  • 原文地址:https://www.cnblogs.com/fiona-zhong/p/10249840.html
Copyright © 2020-2023  润新知