Python實現擴展內置類型的方法分析
本文實例講述了Python實現擴展內置類型的方法。分享給大家供大家參考,具體如下:
簡介
除了實現新的類型的對象方式外,有時我們也可以通過擴展Python內置類型,從而支持其它類型的數據結構,比如為列表增加隊列的插入和刪除的方法。本文針對此問題,結合實現集合功能的實例,介紹了擴展Python內置類型的兩種方法:通過嵌入內置類型來擴展類型和通過子類方式擴展類型。
通過嵌入內置類型擴展
下面例子通過將list對象作為嵌入類型,實現集合對象,并增加了一下運算符重載。這個類知識包裝了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開始,所有內置類型都能直接創(chuàng)建子類,如list,str,dict以及tuple。這樣可以讓你通過用戶定義的class語句,定制或擴展內置類型:建立類型名稱的子類并對其進行定制。類型的子類型實例,可用在原始的內置類型能夠出現的任何地方。
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)
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python編碼操作技巧總結》、《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對大家Python程序設計有所幫助。
相關文章
Django ForeignKey與數據庫的FOREIGN KEY約束詳解
這篇文章主要介紹了Django ForeignKey與數據庫的FOREIGN KEY約束詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python中DataFrame常用的描述性統(tǒng)計分析方法詳解
這篇文章主要介紹了python中DataFrame常用的描述性統(tǒng)計分析方法詳解,描述性統(tǒng)計分析是通過圖表或數學方法,對數據資料進行整理、分析,并對數據的分布狀態(tài)、數字特征和隨機變量之間的關系進行估計和描述的方法,需要的朋友可以參考下2023-07-07python基于OpenCV模塊實現視頻流數據切割為圖像幀數據(流程分析)
這篇文章主要介紹了python基于OpenCV模塊實現視頻流數據切割為圖像幀數據,這里今天主要是實踐一下視頻流數據的預處理工作,需要的朋友可以參考下2022-05-05Python報錯:NameError:?name?‘xxx‘?is?not?defined的解決辦法
這篇文章主要給大家介紹了關于Python報錯:NameError:?name?‘xxx‘?is?not?defined的解決辦法,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-06-06