也許上一篇博文提到的property內置函數的用法你還覺得記憶猶新,那麼有沒有更多的類似的方法呢?有的,就是本篇文章要說的魔法方法 魔法方法 1.什麼是魔法方法 (其實前面已經提到多次,每次我都是說暫且不談,後面會提到,在這裡終於填坑了) 總是被雙下劃線包圍的方法,比如__init__ 魔法方法是面 ...
也許上一篇博文提到的property內置函數的用法你還覺得記憶猶新,那麼有沒有更多的類似的方法呢?有的,就是本篇文章要說的魔法方法
魔法方法
1.什麼是魔法方法
(其實前面已經提到多次,每次我都是說暫且不談,後面會提到,在這裡終於填坑了)
總是被雙下劃線包圍的方法,比如__init__
魔法方法是面向對象的python的一切。有句話叫“如果你不清楚魔法方法,那麼你還沒能意識到面向對象的python的強大”
所以在python中,魔法方法是很重要的
2.為什麼叫魔法方法:
在於魔法方法的“魔力”,體現在他們總能夠在適當的時候自動調用
3.哪些是魔法方法
有很多,最基本的就是__init__,__new__,__del__,這些。並且魔法方法可以自定義(關於如何如何自定義魔法方法後面的章節里有,這裡暫且不談)
上面三個魔法方法就是今天的主角:
__init__(self[,……])
這個魔法方法應該不陌生,前面幾個章節一直在用的。但是有個問題,註意看下麵的例子:
怎麼報錯了?之前是不是自以為很瞭解__init__了,但是它居然有不為人知的一面對吧?居然報錯了,啥原因呢?
我們先看一個正常的例子:
這個是我們熟悉的用法對吧?沒有像剛纔那樣報錯,也沒有返回什麼東西。到底為啥,在上面的報錯信息里已經給出答案了:
意思是__init__()調用時,應該返回一個空值,而不是一個字元串類型。換句話就是__init__返回必須是None,不能是其他任何對象。
再上面那個正常的例子,因為b=B()這個步驟表示,B類對象實例化給b對象時,由於會自動調用__init__,看例子里沒有任何返回,也就是None的。所以現在應該看懂了吧
__new__(cls[,……])
- __new__繼承自object類
- __new__至少要有一個參數cls,即要實例化的類,此參數在實例化時由Python解釋器自動提供
- __new__必須得返回實例化出來的實例
例:
註意標記出來的返回的寫法
__del__(self)
__del__是python中的垃圾回收機制的體現
直接上例子:
註意:
- del 不等於 __del__
- 只有當所有變數對__init__(self)的引用都被del之後才會啟動垃圾回收機制,垃圾回收機制銷毀對象時,才會自動調用__del__(self)
上面的幾個魔法方法都說得很淺顯,例子也很簡單,所以看不出具體的用法,相信你看完也不是很懂,放心,後面的章節都會圍繞魔法方法來講,後面還會用到這幾個魔法方法的。而本篇博文只是作為對魔法方法的瞭解,後面才是真正的進入魔法方法。