自定義序列的相關魔法方法允許我們自己建立的類擁有序列的特性,讓其使用起來就像 python 的內建序列(dict,tuple,list,string等)。
因為如果要定製容器型別的話需要用到這些協議。首先,實現不變容器的話有乙個協議:實現不可變容器,你只能定義__len__
和__getitem__
(一會會講更多)。可變容器協議則需要所有不可變容器的所有另外還需要 增加定義__setitem__
和__delitem__
。 。最終,如果你希望你的物件是可迭代的話,你需要定義__iter__
會返回乙個迭代器。迭代器必須遵循迭代器協議,需要有__iter__
(返回它本身) 和next
。
classfunctionallist:
'''乙個列表的封裝類,實現了一些額外的函式式
方法,例如head, tail, init, last, drop和take。
'''def
__init__(self, values=none):
if values is
none:
self.values =
else
: self.values =values
def__len__
(self):
return
len(self.values)
def__getitem__
(self, key):
#如果鍵的型別或值不合法,列表會返回異常
return
self.values[key]
def__setitem__
(self, key, value):
self.values[key] =value
def__delitem__
(self, key):
delself.values[key]
def__iter__
(self):
return
iter(self.values)
def__reversed__
(self):
return
reversed(self.values)
def
defhead(self):
#取得第乙個元素
return
self.values[0]
deftail(self):
#取得除第乙個元素外的所有元素
return self.valuse[1:]
definit(self):
#取得除最後乙個元素外的所有元素
return self.values[:-1]
deflast(self):
#取得最後乙個元素
return self.values[-1]
defdrop(self, n):
#取得除前n個元素外的所有元素
return
self.values[n:]
deftake(self, n):
#取得前n個元素
return self.values[:n]
參考:
Python 基礎之魔法方法
構造方法類似於初始化方法,但是構造方法與其他普通的方法的不同之處在於,當乙個物件被建立之後,會立即呼叫構造方法。class servant object definit self self.servant saber fb servant fb.init print fb.servant class...
PHP 魔法方法之 call和
call和 callstatic方法都可用於防止呼叫不存在的方法而出現報錯,但也能用於方法的動態建立,這在mvc等框架設計中是很有用的語法。call方法原型如下 mixed call string name array arguments 當呼叫乙個不可訪問的方法 如未定義,或者不可見 時,call...
python的魔法方法之 name
1.name 執行時有個預設值,分以下兩種情況 1 有以下 名為 main.py def test1 print test print name test1 呼叫此函式執行結果為 test main 總結 在同一頁面列印 name 結果為 main 2 新建一檔案test.py,並且把main.py...