標籤:member ber 面向 usr traceback http pre tab user
註:python 3.x版本才能使用
枚舉格式:
from enum import Enum
新類名 = Enum(變數統稱名,(變數1,變數2....))
Month = Enum('month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))
1.
seasons = ['Spring', 'Summer', 'Fall', 'Winter']print (list(enumerate(seasons)))
運行結果:
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
2.
from enum import EnumMonth = Enum('month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))for name, member in Month.__members__.items(): print(name, '=>', member, ',', member.value)
運行結果:
Jan => month.Jan , 1Feb => month.Feb , 2Mar => month.Mar , 3Apr => month.Apr , 4May => month.May , 5Jun => month.Jun , 6Jul => month.Jul , 7Aug => month.Aug , 8Sep => month.Sep , 9Oct => month.Oct , 10Nov => month.Nov , 11Dec => month.Dec , 12
3. 當Class中有重複值時,會返回第一個,其他忽略
from enum import Enumclass Weekday(Enum): monday = 1 tusday = 1 wensdday =3 thursday =9 friday =5#print (Weekday(1))for n in Weekday: print (n)
運行結果:
Weekday.mondayWeekday.wensddayWeekday.thursdayWeekday.friday
手動打Enum值時,一不小心打錯了怎麼辦,又得一個個找,真麻煩。所以,有人想,如果有個方法能夠檢查重複值就好了,於是:@unique就出來了
from enum import Enum, @uniqueclass Weekday(Enum): monday = 1 tusday = 1 wensdday =3 thursday =9 friday =5print (Weekday(1)
運行結果:
Traceback (most recent call last): File "/usercode/file.py", line 7, in <module> class Weekday(Enum): File "/usr/lib/python3.4/enum.py", line 524, in unique (enumeration, alias_details))
4.有人也在想,我就是不改咋地!我能不能通過另一個方法把成員都列印出來?於是:__members__就出來了
from enum import Enumclass Weekday(Enum): monday = 1 tusday = 1 wensdday = 3 thursday = 9 friday = 5for n,y in Weekday.__members__.items(): print (n, '--', y, '--', y.value) f = Weekday.thursdayprint (f.value)
運行結果:
monday -- Weekday.monday -- 1tusday -- Weekday.tusday -- 1wensdday -- Weekday.wensdday -- 3thursday -- Weekday.thursday -- 9friday -- Weekday.friday -- 59
5.枚舉比較:不能比大小!!能比同值
from enum import Enum, unique#@uniqueclass Weekday(Enum): monday = 1 tusday = 1 wensdday =3 thursday =9 friday =5print (Weekday.monday == Weekday.wensdday)print (Weekday.tusday is Weekday.friday )print (Weekday.tusday > Weekday.friday )
運行結果:
FalseFalseTraceback (most recent call last): File "/usercode/file.py", line 16, in <module> print (Weekday.tusday > Weekday.friday )TypeError: unorderable types: Weekday() > Weekday()
看到一個很好很好的Blog,這講的內容,他的比廖某的還要簡潔明了。很喜歡。我的怎麼亂?我純粹是做筆記,沒想那麼多,要改構造想多了反而浪費時間。
66476601
python Class:物件導向進階編程 Enum(枚舉)、@unique