Python中的枚舉怎麼實現

WBOY
發布: 2023-05-11 16:28:14
轉載
1212 人瀏覽過

使用普通類別直接實作枚舉

在Python中,枚舉和我們在物件中定義的類別變數時一樣的,每一個類別變數就是一個枚舉項,存取枚舉項的方式為:類別名稱加上類別變量,像下面這樣:

class color():
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 访问枚举项
print(color.YELLOW) # 1
登入後複製

雖然這樣是可以解決問題的,但是並不嚴謹,也不怎麼安全,例如:

1、枚舉類別中,不應該存在key相同的枚舉項(類別變數)

2、不允許在類別外直接修改枚舉項的值

class color():
    YELLOW  = 1
    YELLOW  = 3   # 注意这里又将YELLOW赋值为3,会覆盖前面的1
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
# 访问枚举项
print(color.YELLOW) # 3
 
# 但是可以在外部修改定义的枚举项的值,这是不应该发生的
color.YELLOW = 99
print(color.YELLOW) # 99
登入後複製

解決方案:使用enum模組

  enum模組是系統內建模組,可以直接使用import導入,但是在導入的時候,不建議使用import enum將enum模組中的所有資料都導入,一般使用的最多的就是enum模組中的Enum、IntEnum、unique這幾項

# 导入枚举类
from enum import Enum
 
# 继承枚举类
class color(Enum):
    YELLOW  = 1
    BEOWN   = 1 
    # 注意BROWN的值和YELLOW的值相同,这是允许的,此时的BROWN相当于YELLOW的别名
    RED     = 2
    GREEN   = 3
    PINK    = 4
 
class color2(Enum):
    YELLOW  = 1
    RED     = 2
    GREEN   = 3
    PINK    = 4
登入後複製

使用自己定義的枚舉類別:

print(color.YELLOW) # color.YELLOW
print(type(color.YELLOW)) # <enum &#39;color&#39;>
 
print(color.YELLOW.value)  # 1
print(type(color.YELLOW.value)) # <class &#39;int&#39;>
 
print(color.YELLOW == 1)    # False
print(color.YELLOW.value == 1)  # True
print(color.YELLOW == color.YELLOW)  # True
print(color.YELLOW == color2.YELLOW)  # False
print(color.YELLOW is color2.YELLOW)  # False
print(color.YELLOW is color.YELLOW)  # True
 
print(color(1))         # color.YELLOW
print(type(color(1)))   # <enum &#39;color&#39;>
  注意事项如下:
登入後複製

1、枚舉類別不能用來實例化物件

2、存取枚舉類別中的某一項,直接使用類別名稱存取加上要存取的項目即可,例如color.YELLOW

3、枚舉類裡面定義的Key = Value,在類別外部不能修改Value值,也就是說下面這個做法是錯誤的

color.YELLOW = 2  # Wrong, can&#39;t reassign member
登入後複製

4、枚舉項可以用來比較,使用==,或者is  

#5、導入Enum之後,一個列舉類別中的Key和Value,Key不能相同,Value可以相,但是Value相同的各項Key都會當做別名

6、如果要枚舉類中的Value只能是整數數字,那麼,可以導入IntEnum,然後繼承IntEnum即可,注意,此時,如果value為字串的數字,也不會報錯:

from enum import IntEnum
登入後複製

7、如果要枚舉類別中的key也不能相同,那麼在導入Enum的同時,需要導入unique函數

from enum import Enum, unique
登入後複製

以上是Python中的枚舉怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!