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)
,只顯示例項名
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是流模式,邊讀...