Python擴展內(nèi)置類型詳解
除了實現(xiàn)新的種類的對象以外,類有時有用于擴展Python的內(nèi)置類型的功能。主要有以下兩種技術(shù):
通過嵌入擴展類型
下例把一些集合函數(shù)變成方法,而且新增了一些基本運算符重載,實現(xiàn)了新的集合對象。對于多數(shù)類而言,這個類只是包裝了Python列表,以及附加的集合運算。
#File setwrapper.py
class Set:
def __init__(self,value=[]):#構(gòu)造函數(shù)
self.data = []
self.concat(value)
def intersect(self,other):#求交集
res = []
for x in self.data:
if x in other:
res.append(x)
return Set(res) #返回一個新的Set
def union(self,other):#求并集
res = self.data[:] #復(fù)制self.data
for x in other:
if not x in res:
res.append(x)
return Set(res)
def concat(self,value):
for x in value:
if not x in self.data:
self.data.append(x)
def __len__(self): # len(self)
return len(self.data)
def __getitem__(self,key): # self[i]
return self.data[key]
def __and__(self,other): # self & other
return self.intersect(other)
def __or__(self,other): # self | other
return self.union(other)
def __repr__(self): # print
return 'Set:' + repr(self.data)
if __name__ == '__main__': #測試用例
x = Set([1,3,5,7])
print(x.union(Set([1,4,7])))
print(x | Set([1,4,6]))
print(x[2])
print(x[2:4])
重載索引運算讓Set類的實例可以充當(dāng)真正的列表。運行結(jié)果如下:
>>>
Set:[1, 3, 5, 7, 4]
Set:[1, 3, 5, 7, 4, 6]
5
[5, 7]
通過子類擴展類型
從Python2.2開始,所有內(nèi)置類型都可以直接創(chuàng)建子類。
這樣讓你可以通過用戶定義的class語句,定制或擴展內(nèi)置類型的行為:建立類型名稱的子類并對其進行定制。類型的子類實例,可以用在原始的內(nèi)置類型能夠出現(xiàn)的任何地方。
例如,假如你對Python列表偏移值以0開始計算而不是1開始一直很困擾,這時你就可以編寫自己的子類,定制列表的核心行為,如下:
# File typesubclass.py
#Map 1..N to 0..N-1; call back to built-in version
class MyList(list):
def __getitem__(self,offset):
print('(indexing %s at %s)'%(self,offset))
return list.__getitem__(self,offset-1)
if __name__ == '__main__':
print(list('abc'))
x = MyList('abc')
print(x)
print(x[1])
print(x[3])
x.append('spam')
print(x)
x.reverse()
print(x)
在這個文件中,MyList子類擴展了內(nèi)置list類型的__getitem__索引運算方法,把索引1到N映射到實際的0到N-1。運行結(jié)果如下:
>>>
['a', 'b', 'c']
['a', 'b', 'c']
(indexing ['a', 'b', 'c'] at 1)
a
(indexing ['a', 'b', 'c'] at 3)
c
['a', 'b', 'c', 'spam']
['spam', 'c', 'b', 'a']
有關(guān)另一個類型子類的例子,可以參考bool類型的實現(xiàn),可以看到bool類是int的子類,有兩個實例(True和False),行為就像整數(shù)1和0,但是繼承了定制后的字符串表達方式來顯示其變量名。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Django的ListView超詳細用法(含分頁paginate)
這篇文章主要介紹了Django的ListView超詳細用法(含分頁paginate),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Python實現(xiàn)將內(nèi)容轉(zhuǎn)為base64編碼與解碼
這篇文章主要為大家詳細介紹了Python實現(xiàn)將內(nèi)容轉(zhuǎn)為base64編碼與解碼的示例代碼,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-02-02
python3中http協(xié)議提供文件服務(wù)器功能詳解
http協(xié)議是互聯(lián)網(wǎng)的通用基礎(chǔ)協(xié)議,也可以利用其來開發(fā)文件服務(wù)器,給客戶提供文件瀏覽,查看,下載,上傳等功能,這篇文章主要介紹了python3中http協(xié)議提供文件服務(wù)器功能,需要的朋友可以參考下2023-06-06
Python OpenCV基于霍夫圈變換算法檢測圖像中的圓形
這篇文章主要介紹了通過霍夫圈變換算法檢測圖像中的圓形,文中用到的函數(shù)為cv2.HoughCircles(),該函數(shù)可以很好地檢測圓心。感興趣的小伙伴可以了解一下2021-12-12
Python中高效抓取數(shù)據(jù)的實戰(zhàn)指南
在數(shù)據(jù)驅(qū)動的時代,網(wǎng)絡(luò)爬蟲已成為獲取信息的核心工具,本文將用通俗的語言,帶您掌握Python爬蟲結(jié)合代理IP抓取數(shù)據(jù)的全流程,希望對大家有一定的幫助2025-04-04

