国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python擴展內置類型詳解

2020-01-04 15:25:52
字體:
來源:轉載
供稿:網友

除了實現新的種類的對象以外,類有時有用于擴展Python的內置類型的功能。主要有以下兩種技術:

通過嵌入擴展類型

下例把一些集合函數變成方法,而且新增了一些基本運算符重載,實現了新的集合對象。對于多數類而言,這個類只是包裝了Python列表,以及附加的集合運算。

#File setwrapper.py  class Set:   def __init__(self,value=[]):#構造函數     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[:] #復制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類的實例可以充當真正的列表。運行結果如下:

>>>  
Set:[1, 3, 5, 7, 4] 
Set:[1, 3, 5, 7, 4, 6] 

[5, 7] 

通過子類擴展類型

從Python2.2開始,所有內置類型都可以直接創建子類。
這樣讓你可以通過用戶定義的class語句,定制或擴展內置類型的行為:建立類型名稱的子類并對其進行定制。類型的子類實例,可以用在原始的內置類型能夠出現的任何地方。
例如,假如你對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子類擴展了內置list類型的__getitem__索引運算方法,把索引1到N映射到實際的0到N-1。運行結果如下:

>>>  
['a', 'b', 'c'] 
['a', 'b', 'c'] 
(indexing ['a', 'b', 'c'] at 1) 

(indexing ['a', 'b', 'c'] at 3) 

['a', 'b', 'c', 'spam'] 
['spam', 'c', 'b', 'a'] 

有關另一個類型子類的例子,可以參考bool類型的實現,可以看到bool類是int的子類,有兩個實例(True和False),行為就像整數1和0,但是繼承了定制后的字符串表達方式來顯示其變量名。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金华市| 高州市| 伊宁市| 浦县| 天长市| 凤庆县| 东港市| 安宁市| 子长县| 华宁县| 高雄市| 深泽县| 应用必备| 麟游县| 定安县| 安仁县| 濮阳县| 安新县| 蕲春县| 全椒县| 德庆县| 比如县| 民和| 宿松县| 兴仁县| 承德市| 东光县| 丰原市| 尼勒克县| 客服| 台中市| 孝昌县| 四子王旗| 房产| 林周县| 北海市| 石棉县| 读书| 商南县| 贞丰县| 北海市|