python魔法方法好难_一篇干货好文,轻松掌握python魔法方法
在python學習中,往往你會看到有的名稱前面和后面都加上了雙下劃線,這種寫法很特別,到底是什么意思呢?
在python 中由這些名字組成的集合所包含的方法就叫做魔法方法,也叫做特殊方法。今天我們就要講一些重要的魔法方法,最重要的就是__init__方法。
當一個對象被創建以后,會立即調用構造方法。
創建構造方法:在python中創建一個構造方法很簡單,只要把init方法的名字從簡單的init修改為魔法版本__init__即可。
一個例子學會所有內容。
代碼講解:定義了一個超類Bird,一個子類SongBird, 超類Bird定義了構造方法__init__是關于hungry特性的。在定義子類的時候構造方法被重寫,但是新的構造方法沒有任何關于hungry特性的代碼。為了達到目的就得必須調用超類的構造方法。
def __init__(self):
self.hungry=True
def eat(self):
if self.hungry:
print ''Aaaah...''
self.hungry=False
else:
print ''No,thanks!''
class SongBird(Bird):
self.sound=''Squawk!''
def sing(self):
print self.sound
>>> b=Bird()
>>> sb=SongBird()
>>> sb.sing()
>>> sb.eat()
Traceback (most recent call last):
File '', line 1, in
File 'C:\Users\xdong\OneDrive - Micron Technology, Inc\python study\prictice\bird_hungry.py', line 6, in eat
AttributeError: ''SongBird'' object has no attribute ''hungry''
相信看了上個例子的小伙伴開始有疑問了,方法重寫后,我應該怎么調用超類的構造方法呢?
我們現在要說兩種情況教你怎么調用,說這個問題之前,我們先插點題外話,與其說是題外話倒不如說是知識擴展,我們先了解一下老式類和新式類的區別,這個需要看你的python的安裝版本是多少,現在大部分都是3.0以上版本了,那么早在之前,以2.2版本為分割線,之前的版本是用的老師類,之后的用新式類。所以根據目前的發展情況,建議大家都用新式類,省的麻煩。
好了,話不多說,回歸正題,我們就用老式類和新式類分別講一下怎么可以直接調用上個例子中的超類Bird的構造方法。
我們先說一下原理,方便你理解。
在調用一個實例的方法時,該方法的self參數會被自動綁定到實例上,但是如果直接調用類的方法,那么就沒有實例會被綁定,這樣就可以自由地提供需要的self參數。其實這樣子也被稱為未綁定方法。
上例中,通過將當前的實例作為self參數提供給未綁定方法,SongBird就能夠使用其他超類構造方法的所有實現,也就是說屬性hungry能被設置。
一般情況下,調用超類的未綁定方法才是版本最好的選擇。
既然說到這了,相信眼睛犀利的小伙伴們開始疑問了,那個super是什么東東?別著急,慢慢來!
super函數:主要是應用在新式類。
序列和映射是對象的集合。為了實現它們基本行為,如果對象是不變的,那么久需要兩個魔法方法,如果可變的就需要4個。
如果創建一個無窮序列會發生什么?先上代碼。
代碼解釋: start=1,step=2 會得到(1,3,5,7,9,11......)
self.start key*self.step s[4]=1 4*2=9 s[5]=1 5*2=11
總結
以上是生活随笔為你收集整理的python魔法方法好难_一篇干货好文,轻松掌握python魔法方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果什么时候发布M5MacBookPro
- 下一篇: java 闹钟代码_JAVA可视化闹钟源