最近在使用Python 的集合物件進行資料處理, 過程中發現某些時候,需要另外撰寫方法取得特定資料,例如
def
fill_tag_data():
for i in range(0, 999):
tag = {}
tag["TagNo"] = '5'+'{0:0>3}'.format(i)
tag["TagName"] = '5'+'{0:0>3}'.format(i)
TagData.append(tag)
TagData = [] #定義為list集合
def
first_element(pList):
if len(pList) > 0:
return pList[0]
else:
return {"TagNo": "5000", "TagName": "5000"}
其中
first_element是定義用來取得list的第一筆記錄的方法,需透過
first_data
= first_element(TagData) 進行操作,當然也可以透過TagData[0],得到第一筆記錄
但美中不足的是,我們必須確定TagData這個list的長度大於0,才能夠取得TagData[0]
因此在取回TagData[0]以前,會另外撰寫判別式
if(len(TagData)>0):
none
於是我在這裡另外建立一個ListPackage類別,並且繼承list
class
ListPackage(list):
def __str__(self):
return "this is new list obj"
def __str__(self):
return "this is new list obj"
這邊建立ListPackage(list)的原因稍後做說明。
回到TagData,原先是TagData =
[],必須修改成 TagData = ListPackage(),並非原本的list
而在
def first_element(pList):
這裡也重新定義成新的方法
def first_element(self): if len(self) == 0: self.append({"TagNo": "5000", "TagName": "5000Name"}) print(self) return self[0]
這裡的first_element可以提供 ListPackage 類別定義為延伸方法:
ListPackage.first_element = first_element
之後TagData若要取得TagData[0],list的第一個位置,可以修改成 TagData.first_element()
Ex:
print(TagData.first_element())
#{‘TagName’: ‘5000’, ‘TagNo’: ‘5000Name’}
這就是python延伸方法的使用方式
另外,這個範例無法使用 list.first_element
=first_element(),由於python list屬於內建的原生資料結構,這在執行時會發生can't
set attributes of built-in/extension type 'list' 的例外狀況,所以需要另外先建立 ListPackage類別,進行list繼承
留言
張貼留言