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]調用

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM