魚c筆記 Python魔法方法五 定製序列

2021-08-15 09:53:20 字數 767 閱讀 5645

想要成功的定製容器,我們首先要了解什麼是協議。

協議(protocols)與其他程式語言中的介面很相似,它規定你哪些方法必須要定義。然而,在python中的協議就顯得不那麼正式。事實上,在python中,協議更像是一種指南、建議。

容器型別的協議:

①如果說你想定製的容器是不可變的話,你只需要定義__len__()和__getitem__()方法

②如果你希望定製的容器是可變的話,除了__len__()和__getitem__()方法,你還需要定義__setitem__()和__delitem__()兩個方法

例子:編寫乙個不可改變的自定義列表,要求記錄列表中每個元素被訪問的次數

>>> class mylist:

def __init__(self, *args):

self.values = [x for x in args]

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

def __len__(self):

return len(self.values)

def __getitem__(self, key):

self.count[key] += 1

return self.values[key]

>>> c1 = mylist(1, 3, 5, 7)

>>> c1[1]

3>>> c1[2]

5>>> c1.count

魚c筆記 Python魔法方法六 迭代器

迭代類似於迴圈,每一次重複的過程被成為一次迭代的過程,每一次迭代得出的結果會被用作下一迭代的初始值。提供迭代方法的容器我們成為迭代器。通常我們接觸到的迭代器有序列,字典。我們通常使用for語句來進行迭代。for i in harry potter print i,end h a r r y p o ...

Python筆記 魔法方法

1.不需要手動呼叫,會在合適的時機自動呼叫 2.這些方法都是以 開始,以 結束 3.方法名都是系統規定的,在合適的時機自己呼叫 class person object def init self,name,age 在建立物件時會自動呼叫這個方法 print init 方法被呼叫了 self.name...

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...