網(wǎng)站首頁 編程語言 正文
枚舉類Enum
枚舉類,在企業(yè)開發(fā)中用的比較多
當(dāng)我們需要定義常量時(shí),一個(gè)辦法是用大寫的變量通過整數(shù)來定義,例如月份:
# 當(dāng)項(xiàng)目中需要使用12個(gè)月份時(shí)
JAN = 1
FEB = 2
...
NOV = 11
DEC = 12
但是這樣的定義的類型是 int
,并且仍然是變量,并且在運(yùn)算中,無法時(shí)時(shí)創(chuàng)建對(duì)應(yīng)的值,當(dāng)然這種指代是以更好的方式去使用變量數(shù)值。
這里存在更好的方法是為這樣的枚舉類型定義一個(gè)class
類型,然后,每個(gè)常量都是class
的一個(gè)唯一實(shí)例。Python提供了 Enum
類來實(shí)現(xiàn)這個(gè)功能。
優(yōu)化如下
# -*- coding: utf-8 -*- from enum import Enum # 枚舉中,一個(gè)名字對(duì)應(yīng)一個(gè)值 Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Otc', 'Nov', 'Dec'))
這樣我們就獲得了 Month
類型的枚舉類,可以直接使用 Month.Jan
來引用一個(gè)常量,或者枚舉它的所有成員通過for
循環(huán)進(jìn)行取值,
Month.__members__
是Month的內(nèi)置變量,可以打印成員標(biāo)簽,
如果在這個(gè)方法調(diào)用上.items()
函數(shù)所有成員都打印出來,數(shù)據(jù)類型為元組
for name, member in Month.__members__.items():
? ? print(f'{name} => {member} , {member.value}')+
定義一個(gè)顏色常量枚舉
# -*- coding: utf-8 -*- from enum import Enum # 枚舉中 一個(gè)一個(gè)名字對(duì)應(yīng)一個(gè)值 Month = Enum('抬頭-Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) print(Month.__members__) # 枚舉中的值自動(dòng)從1開始,不會(huì)重復(fù) # 得到三月份的值 print(Month['Mar'].value) # 3 # 根據(jù)(2)來獲得月份名字 print(Month(2).name) # Feb # 定義一個(gè)顏色的常量枚舉 class Color(Enum): # 第二種:自定義一個(gè)枚舉類 red = 100 green = 200 blue = 300 yellow = 200 # 不允許key相同或者value,如果value重復(fù),根據(jù)value取name只能取第一個(gè) print(Color(200)) # Color.green
不允許key相同或者value相同,如果value重復(fù),根據(jù)value取name只能取第一個(gè)
總結(jié)
1.枚舉類不能用來實(shí)例化對(duì)象
2.訪問枚舉類中的某一項(xiàng),直接使用類名訪問加上要訪問的項(xiàng)即可,比如 color.RED
3.枚舉類里面定義的 Key = Value,在類外部不能修改 Value 值
4.枚舉項(xiàng)可以用來比較,使用 ==,或者 is
5.枚舉類中的 Key 不能相同,Value 可以相同,但是 Value 相同的各項(xiàng) Key 都會(huì)當(dāng)做別名
6.枚舉類可以用 for 進(jìn)行遍歷,members.items() 可以遍歷出含有別名的類
7.如果要枚舉類中的 key 也不能相同,需要導(dǎo)入 unique 對(duì)枚舉類進(jìn)行裝飾
原文鏈接:https://aweia.blog.csdn.net/article/details/125583107
相關(guān)推薦
- 2022-05-09 輕量級(jí)ORM框架Dapper應(yīng)用之實(shí)現(xiàn)DTO_實(shí)用技巧
- 2023-02-01 C語言中聯(lián)合體與共用體和枚舉使用語法示例_C 語言
- 2022-09-22 string類的模擬實(shí)現(xiàn)
- 2022-05-08 Python函數(shù)命名空間和作用域(Local與Global)_python
- 2022-10-19 C#如何提取經(jīng)緯度文件中的經(jīng)緯度數(shù)據(jù)_C#教程
- 2022-05-08 C++中如何修改const變量你知道嗎_C 語言
- 2022-04-27 python進(jìn)階之協(xié)程你了解嗎_python
- 2023-11-22 Linux fatal: unable to access ‘https://github xxxx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支