python Class:物件導向進階編程 Enum(枚舉)、@unique

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.