Python學習筆記__7.5章 使用枚舉類

來源:互聯網
上載者:User

標籤:程式設計語言   Python   

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

當我們需要定義有規律的常量時,比如月份。我們可以用Enum類來實現這個功能

1.1、直接使用Enum類

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

>>> type(Month)

<class 'enum.EnumMeta'>

定義了一個枚舉類型的Month類,其中每個常量都是Month類的一個唯一執行個體。

 

# 枚舉Month的所有成員

for name, member in Month.__members__.items():

    print(name, '=>', member, ',', member.value)

 

Jan => Month.Jan , 1

Feb => Month.Feb , 2

參數分析:

name:Month中的每個常量名

member:Month中的每個執行個體

member.value:value屬性則是自動賦給成員的int常量,預設從1開始計數

# 使用

>>> Month.Jan  # 直接引用一個常量,比如使用Month.Jan

<Month.Jan: 1>

>>> Month(1)  # 通過value值來顯示

<Month.Jan: 1>

# 看下Month的內部結構

>>> list(Month)      # 我們可以看到,Month內部,每個執行個體和value組成了索引值對

[<Month.Jan: 1>, <Month.Feb: 2>, <Month.Mar: 3>, <Month.Apr: 4>, <Month.May: 5>,

 <Month.Jun: 6>, <Month.Jul: 7>, <Month.Aug: 8>, <Month.Sep: 9>, <Month.Oct: 10>

, <Month.Nov: 11>, <Month.Dec: 12>]

註:Month裡的索引值對是由Enum('Month', ('Jan',…)裡的Month,Jane,value,共同組合而成。例如

>>> Gender=Enum('gender',('Male','Female'))

>>> list(Gender)

[<gender.Male: 1>, <gender.Female: 2>]

 

 

1.2、從Enum派生出自訂類

如果需要更精確地控制枚舉類型,可以從Enum派生出自訂類使用

from enum import Enum, unique

@unique # @unique裝飾器可以協助我們檢查保證沒有重複值

class Weekday(Enum):

    Sun = 0 # 自訂Value值

    Mon = 1

    Tue = 2

    Wed = 3

    Thu = 4

    Fri = 5

    Sat = 6

 

參數分析:

常量名:Sun,Mon,…

執行個體:Weekday.Sun,Weekday.Mon,…

Value值:0,1,2,…

 

# Weekday的結構

>>> list(Weekday)

[<Weekday.Sun: 0>, <Weekday.Mon: 1>, <Weekday.Tue: 2>, <Weekday.Wed: 3>, <Weekda

y.Thu: 4>, <Weekday.Fri: 5>, <Weekday.Sat: 6>]

 

# print(執行個體) 和 直接使用執行個體 的區別

>>> print(Weekday.Tue)  # print,只顯示執行個體名

Weekday.Tue

>>> Weekday.Tue  # 直接使用執行個體,顯示索引值對

<Weekday.Tue: 2>

>>> print(Weekday(1))

Weekday.Mon

>>> Weekday(1)

<Weekday.Mon: 1>

 

1.3、總結

既可以用成員名稱引用枚舉常量【Month.Jan】,又可以直接根據value的值獲得枚舉常量【Month(1)】

 

2、例子

1、把Student的gender屬性改造為枚舉類型,可以避免使用字串:

# -*- coding: utf-8 -*-

 

from enum import Enum, unique

方法一:使用Enum的衍生類別

class Gender(Enum): 

    Male = 0

    Female = 1

方法二:直接使用Enum

Gender = Enum('Gender', ('Male', 'Female'))

 

class Student(object):

    def __init__(self, name, gender):

        self.name = name

        self.gender = gender

# 測試:
bart = Student('Bart', Gender.Male)
if bart.gender == Gender.Male:
    print('測試通過!')
else:
    print('測試失敗!')


Python學習筆記__7.5章 使用枚舉類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.