91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python擴展內置類型詳解

發布時間:2020-08-28 21:15:06 來源:腳本之家 閱讀:126 作者:KLeonard 欄目:開發技術

除了實現新的種類的對象以外,類有時有用于擴展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,但是繼承了定制后的字符串表達方式來顯示其變量名。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴安盟| 郴州市| 阳曲县| 玉溪市| 桃源县| 信丰县| 太仓市| 象山县| 柳林县| 墨江| 黔江区| 滕州市| 张北县| 华阴市| 呼玛县| 崇左市| 军事| 额尔古纳市| 巨野县| 澄城县| 饶阳县| 宁都县| 益阳市| 鲁山县| 西昌市| 禄丰县| 涟源市| 深圳市| 年辖:市辖区| 梅河口市| 灵石县| 乌什县| 岐山县| 获嘉县| 宁夏| 巴青县| 工布江达县| 珲春市| 嫩江县| 南部县| 庐江县|