Python學習筆記 7 5章 使用列舉類

2021-08-28 08:19:00 字數 2505 閱讀 7769

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)

定義了乙個列舉型別的

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(1)

# 通過

value

值來顯示

# 看下month的內部結構

>>> list(month)

# 我們可以看到,

month

內部,每個例項和

value

組成了鍵值對

[, , , , ,

, , , ,

, , ]

注:month裡的鍵值對是由enum('month', ('jan',…)裡的month,jane,value,共同組合而成。例如

>>> gender=enum('

gender

',('male','female'))

>>> list(gender)

[, ]

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)

[, , , , y.thu: 4>, , ]

# print(例項) 和 直接使用例項 的區別

>>> print(weekday.tue)

# print

,只顯示例項名

weekday.tue

>>> weekday.tue

# 直接使用例項,顯示鍵值對

>>> print(weekday(1))

weekday.mon

>>> weekday(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 內建模組struct

python中變數的型別只有列表 元祖 字典 集合等高階抽象型別,並沒有像c中定義了位 位元組 整型等底層初級型別。因為python本來就是高階解釋性語言,執行的時候都是經過翻譯後再在底層執行。如何打通python和其他語言之間的型別定義障礙,python的內建模組struct完全解決了所有問題。在...

Python學習筆記 7 6章 使用原類

1 概覽 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。1.1 type class的定義是執行時動態建立的,而建立class的方法就是使用type 函式。通過type 函式建立的類和直接寫class是完全一樣的,因為python直譯器遇到class定義時...

Python學習筆記 12 10章 XML

1 概覽 xml雖然比json複雜,在web中應用也不如以前多了,不過仍有很多地方在用,所以,有必要了解如何操作xml。1 dom vs sax 操作xml有兩種方法 dom和sax。dom會把整個xml讀入記憶體,解析為樹,因此占用記憶體大,解析慢,優點是可以任意遍歷樹的節點。sax是流模式,邊讀...