Python實現(xiàn)擴展內(nèi)置類型的方法分析
本文實例講述了Python實現(xiàn)擴展內(nèi)置類型的方法。分享給大家供大家參考,具體如下:
簡介
除了實現(xiàn)新的類型的對象方式外,有時我們也可以通過擴展Python內(nèi)置類型,從而支持其它類型的數(shù)據(jù)結(jié)構(gòu),比如為列表增加隊列的插入和刪除的方法。本文針對此問題,結(jié)合實現(xiàn)集合功能的實例,介紹了擴展Python內(nèi)置類型的兩種方法:通過嵌入內(nèi)置類型來擴展類型和通過子類方式擴展類型。
通過嵌入內(nèi)置類型擴展
下面例子通過將list對象作為嵌入類型,實現(xiàn)集合對象,并增加了一下運算符重載。這個類知識包裝了Python的列表,以及附加的集合運算。
class Set:
def __init__(self, value=[]): # Constructor
self.data = [] # Manages a list
self.concat(value)
def intersect(self, other): # other is any sequence
res = [] # self is the subject
for x in self.data:
if x in other: # Pick common items
res.append(x)
return Set(res) # Return a new Set
def union(self, other): # other is any sequence
res = self.data[:] # Copy of my list
for x in other: # Add items in other
if not x in res:
res.append(x)
return Set(res)
def concat(self, value): # value: list, Set...
for x in value: # Removes duplicates
if not x in self.data:
self.data.append(x)
def __len__(self): return len(self.data) # len(self)
def __getitem__(self, key): return self.data[key] # self[i]
def __and__(self, other): return self.intersect(other) # self & other
def __or__(self, other): return self.union(other) # self | other
def __repr__(self): return 'Set:' + repr(self.data) # print()
if __name__ == '__main__':
x = Set([1, 3, 5, 7])
print(x.union(Set([1, 4, 7]))) # prints Set:[1, 3, 5, 7, 4]
print(x | Set([1, 4, 6])) # prints Set:[1, 3, 5, 7, 4, 6]
通過子類方式擴展類型
從Python2.2開始,所有內(nèi)置類型都能直接創(chuàng)建子類,如list,str,dict以及tuple。這樣可以讓你通過用戶定義的class語句,定制或擴展內(nèi)置類型:建立類型名稱的子類并對其進行定制。類型的子類型實例,可用在原始的內(nèi)置類型能夠出現(xiàn)的任何地方。
class Set(list):
def __init__(self, value = []): # Constructor
list.__init__([]) # Customizes list
self.concat(value) # Copies mutable defaults
def intersect(self, other): # other is any sequence
res = [] # self is the subject
for x in self:
if x in other: # Pick common items
res.append(x)
return Set(res) # Return a new Set
def union(self, other): # other is any sequence
res = Set(self) # Copy me and my list
res.concat(other)
return res
def concat(self, value): # value: list, Set . . .
for x in value: # Removes duplicates
if not x in self:
self.append(x)
def __and__(self, other): return self.intersect(other)
def __or__(self, other): return self.union(other)
def __repr__(self): return 'Set:' + list.__repr__(self)
if __name__ == '__main__':
x = Set([1,3,5,7])
y = Set([2,1,4,5,6])
print(x, y, len(x))
print(x.intersect(y), y.union(x))
print(x & y, x | y)
x.reverse(); print(x)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
淺談python對象數(shù)據(jù)的讀寫權(quán)限
下面小編就為大家?guī)硪黄獪\談python對象數(shù)據(jù)的讀寫權(quán)限。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
在Django下創(chuàng)建項目以及設(shè)置settings.py教程
今天小編就為大家分享一篇在Django下創(chuàng)建項目以及設(shè)置settings.py教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12

