Python-枚舉

  枚舉其實本質上是一種映射,爲了知足對分類的可讀性,在數據庫中分類的存儲通常爲數字編號,而直接使用數字編號在代碼中可閱讀性太差,而後就產生了枚舉類型python

 

枚舉類沒有出現以前,則經過變量、字典和類的方式定義枚舉類數據庫

  1. 變量方式定義枚舉設計模式

# 男 SQL_MALE = 0 # 女 SQL_FEMALE = 1

  2. 字典方式定義枚舉編碼

SQL_SEX = {'MALE': 0, 'FEMALE': 1}

  3. 類方式定義枚舉spa

class Sql: MALE = 0 FEMALE = 1 print(Sql.MALE)

  # 都很好解決了枚舉需求,但都有可變、沒有防止相同標籤的缺陷設計

 

那,枚舉須要的特性有哪些?code

  1. 不能更改blog

  2.  不能有相同類型的標籤繼承

  3. 對應的數值相同,下面的類型標籤至關於別名生命週期

 

枚舉模塊  enum

import enum class Course(enum.Enum): PYTHON = 0 GO = 1 C = 2 JAVA = 3 course_type = Course.PYTHON
# 只輸出類型,而不是類型對應的值 print(course_type)

 

對枚舉類有哪些相關操做

  1. 遍歷枚舉類

import enum class Course(enum.Enum): PYTHON = 0 GO = 1 C = 2 JAVA = 3 for Type in Course: print(Type) 

  2. 取枚舉類型和枚舉類型

import enum class Course(enum.Enum): PYTHON = 0 GO = 1 C = 2 JAVA = 3 # 取名字 enum_name = Course.PYTHON.name # 取值 enum_value = Course.PYTHON.value print(type(enum_name), enum_name) print(type(enum_value), enum_value) 

  3. 枚舉間只能 == 和 is 關係運算

import enum class Course(enum.Enum): PYTHON = 0 BEI_MEN_CHUI_XUE = 0 GO = 1 C = 2 JAVA = 3 print(Course.PYTHON is Course.BEI_MEN_CHUI_XUE) print(Course.PYTHON == Course.BEI_MEN_CHUI_XUE) 

  4. 把 value 如 0 1 等轉換爲枚舉類型

import enum class Course(enum.Enum): PYTHON = 0 BEI_MEN_CHUI_XUE = 0 GO = 1 C = 2 JAVA = 3 value = 0 enum_type = Course(value) print(enum_type, type(enum_type)) 

  5. 限制枚舉類型中類型對應的值只能是int類型,須要繼承enum中的IntEnum

import enum class Course(enum.IntEnum): PYTHON = 0 BEI_MEN_CHUI_XUE = 0 GO = 1 C = 2 JAVA = 3 

  6. 限制枚舉類型中不能有相同的對應的值,須要經過裝飾器 unique裝飾枚舉類

import enum @enum.unique class Course(enum.IntEnum): PYTHON = 0 GO = 1 C = 2 JAVA = 3 print(Course.PYTHON) 

  

經驗:

  1. 枚舉類型本質上是爲了解決數字編號到代碼中的可讀性問題,通常用於數據庫存儲使用

  2. 枚舉類型是設計模式中的單例設計模式,不能實例化

 

經驗關於設計模式:

  1. 設計模式不能解決代碼混亂問題,設計模式解決的是需求變化的頻繁致使代碼更改頻繁的一種思路

  2. 設計模式雖然頗有優點,自己最重要的仍是團隊的規範和能力認識問題,須要花費很是大的時間成本和須要很是優秀的技術人員(2到3年的編碼經驗)

  3. 設計模式還須要考量項目的生命週期,若是是大項目能夠考慮設計模式,小項目就沒必要了,綜合考量時間成本和技術能力選擇是否使用設計模式

  4. 代碼的可讀性永遠放在第一位!代碼的可讀性永遠放在第一位!代碼的可讀性永遠放在第一位!重要的事情說3遍

相關文章
相關標籤/搜索