魔法方法之自定義序列

2022-06-09 11:57:10 字數 1638 閱讀 5954

自定義序列的相關魔法方法允許我們自己建立的類擁有序列的特性,讓其使用起來就像 python 的內建序列(dict,tuple,list,string等)。

因為如果要定製容器型別的話需要用到這些協議。首先,實現不變容器的話有乙個協議:實現不可變容器,你只能定義__len____getitem__(一會會講更多)。可變容器協議則需要所有不可變容器的所有另外還需要 增加定義__setitem____delitem__。 。最終,如果你希望你的物件是可迭代的話,你需要定義__iter__會返回乙個迭代器。迭代器必須遵循迭代器協議,需要有__iter__(返回它本身) 和next。 

class

functionallist:

'''乙個列表的封裝類,實現了一些額外的函式式

方法,例如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...