Python3 魔法方法 定製序列

2021-10-01 09:30:55 字數 2112 閱讀 4290

分別是 列表、元組、字串

python中的協議更像是一種指南,例如鴨子型別,乙隻鳥像鴨子一樣走,像鴨子一樣叫,像鴨子一樣遊然後這只鳥就可以叫做鴨子

如果希望定製的容器是不可變的,那麼只需要定義__len__ 和__getitem__ 方法

如果希望定製的容器是可變的,那麼還需要定義 __setitem__ 和__delitem__方法

_len__(self)

定義當被 len() 呼叫時的行為(返回容器中元素的個數)

__getitem__(self, key)

定義獲取容器中指定元素的行為,相當於 self[key]

__setitem__(self, key, value)

定義設定容器中指定元素的行為,相當於 self[key] = value

__delitem__(self, key)

定義刪除容器中指定元素的行為,相當於 del self[key]

例子:自定義乙個列表類,完成list所有功能,並增counter(index)方法返回index對應值mylist[index]的訪問次數

class

mylist:

def__init__(self,*args):

self.mylist = [x for x in

args]

self.count={}.fromkeys(range(len(self.mylist)),0)

print

(self.mylist)

def__len__

(self):

return

len(self.mylist)

def__getitem__

(self,key):

self.count[key]+=1

return

self.mylist[key]

def__setitem__

(self,key,value):

self.mylist[key]=value

def__delitem__

(self,key):

self.mylist.remove( self.mylist[key])

delself.count[key]

def self.count[len(self.mylist)-1]=0

defcounter(self, key):

return

self.count[key]

defpop(self):

self.mylist.pop()

self.count.pop(len(self.count)-1)

definsert(self,index,value):

keys=

values=

self.mylist.insert(index,value)

for each_key in

self.count.keys():

keys.insert(index,index)

for i in range(index+1,len(self.mylist)):

keys[i]+=1

for i in

range(len(keys)):

self.count[keys[i]]=0

defclear(self):

self.mylist.clear()

self.count.clear()

defreverse(self):

keys=

values=

self.mylist.reverse()

for each_key in

self.count.keys():

for each_val in

self.count.values():

keys.reverse()

#直接呼叫方法不能加等號

values.reverse()#

直接呼叫方法不能加等號

self.count.clear()

for i in

range(len(keys)):

self.count[keys[i]]=values[i]

python 魔法方法 定製序列 迭代器

容器型別的協議 如果說你希望定製的容器是不可變的話,你只需要定義 len 和 getitem 方法。如元組 字串 如果你希望定製的容器是可變的話,除了 len 和 getitem 方法,你還需要定義 setitem 和 delitem 兩個方法。容器型別的魔法方法如下 編寫乙個不可改變的自定義列表,...

魔法方法 定製序列(有關Protocol協議)

讀書筆記 重打 class countlist list def init self,args super.init args self count for i in args def len self return len self.count def getitem self,key self....

第047講 魔法方法 定製序列

常言道 無規矩不成方圓 講的是萬事萬物的發展都要在一定的規則下去執行,只有遵循一定的協議去做,事情才能夠按照正確的道路去發展。我們今天要談的是 定製容器,想要成功的實現容器的定製,我們要先談一談協議,那麼什麼是協議呢?協議 protlcols 與其他程式語言中的介面很相似,它規定你在哪些地方必須定義...