Python類學習(九 列舉類Enum

2021-09-26 06:24:50 字數 2625 閱讀 7704

目錄

1. 兩種方式定義列舉類

1)直接使用enum()函式列出多個列舉值來建立列舉類;

2)通過繼承enum類定義列舉類

2. 列舉類定義建構函式

什麼是列舉類?

物件有限且固定的類;(比如季節類,只包括春夏秋冬四個物件)

from enum import enum

# 定義season列舉類

season = enum('season', ('spring', 'summer', 'fall', 'winter'))

# 第乙個引數值為列舉類的類名,第二個引數值為乙個元組,用於列出所有的列舉物件

定義的四個列舉物件都有name、value兩個屬性,name為該列舉物件的物件名,value代表該物件在列舉值中的序號(從1開始):

# 測試列舉物件兩個屬性的用法

print(season.spring) # season.spring

print(season.summer.name) # summer

print(season.fall.value) # 3

程式可以通過列舉物件名或者列舉物件序號值訪問列舉物件:

print(season['spring'])     # season.spring

print(season(2)) # season.summer 注意是括號

python還為列舉提供了乙個__members__屬性,該屬性返回乙個dict字典,字典包含所有的列舉物件:

print(season.__members__)

# ordereddict([('spring', ), ('summer', ), ('fall', ), ('winter', )])

print(season.__members__.items())

# odict_items([('spring', ), ('summer', ), ('fall', ), ('winter', )])

為物件新建例項變數或者方法,列舉物件用「 類名.物件名

」表示

season.spring.day = 31+28+31

print(season.spring.day) # 90

def inf():

print("春天")

season.spring.des = inf

season.spring.des() # 春天

from enum import enum

class season(enum):

# 建立列舉物件並指定value值

spring = "1"

summer = "2"

fall = "3"

winter = "4"

def inf(self):

if self.value == '1':

print("春天")

elif self.value == '2':

print("夏天")

elif self.value == '3':

print("秋天")

else:

print("冬天")

print(season.spring) # season.spring

print(season.spring.name) # spring

print(season.spring.value) # 1 這個1是字串型別

print(season['spring']) # season.spring

season.spring.inf() # season.spring

from enum import enum

class season(enum):

# 建立列舉物件並指定value值,超過乙個值python會自動將其封裝成乙個元組傳給value

spring = "1", "春天"

summer = "2", "夏天"

fall = "3", "秋天"

winter = "4", "冬天"

# 因為列舉類物件已經確定,所以建構函式不會用於建立新物件,其主要作用是對映物件的value值,

# value值有幾個元素,建構函式就有幾個引數(不包括引數self)

def __init__(self, num, ch_name):

self.num = num

self.ch_name = ch_name

# value值以元組形式輸出

print(season.spring.value) # ('1', '春天')

# num、ch_name分別對映value元組的每個元素

print(season.spring.num)

print(season.spring.ch_name)

python學習筆記 30 列舉類

當我們需要定義常量時,乙個辦法是用大寫變數通過整數來定義,例如月份 jan 1 feb 2 mar 3 nov 11 dec 12好處是簡單,缺點是型別是int,並且仍然是變數。更好的方法是為這樣的列舉型別定義乙個class型別,然後,每個常量都是class的乙個唯一例項。python提供了enum...

23 列舉類和元類

列舉類from enum import enum month enum month jan feb mar apr may jun jul aug sep oct nov dec 可以直接使用month.jan來引用乙個常量,或者列舉它的所有成員 for name,member in month.m...

Kotlin筆記 八 八 列舉類

kotlin使用enum class關鍵字定義列舉類,可以實現乙個或多個介面 列舉類的所有例項必須在 第一行顯式列出 例項間用 隔開,以 結束 列舉類可以有自己的 屬性 方法 構造器 構造器只能使用private修飾符,省略則預設使用private 列舉類應該被設為不可變類,屬性不應該允許改變,推薦...