python 枚举Enum

Posted fiona-zhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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之枚举类型

python 怎么封装枚举类型

Python 枚举

Python 的枚举 Enum

Python-枚举

python 有宏定义,或者枚举么