今天我們來學習乙個比較有用的方法(類),叫做super。為什麼要學習這個方法?這個方法有什麼用?
比如說,我們在寫乙個類,現在要呼叫其父類的某個方法,在python2.2之前,通常是這樣寫的:
class a:
def __init__(self):
print "a"
print "~a"
class b(a):
def __init__(self):
print "b"
a.__init__(self)
print "~b"
b=b()
執行結果:
上面這種做法是,通過類名a來引用其方法__init__(),然後傳入物件self,從而呼叫父類a。這樣做的缺點很明顯,比如說,我們在子類b中多次呼叫了父類a的方法,則當我們想要更改父類,即想要使b繼承c,則需要去讀整個**,將所有的類似呼叫全都更改過來。所以從python2.2開始,python新增了乙個關鍵字super,專門用於解決這個問題:
super(type[, object-or-type])
該方法將返回type的超類,值得注意的是,super()僅僅對新式類可用,也即繼承object的類。舉例來看一下:
class a(object):
def __init__(self):
print "a"
print "~a"
class b(a):
def __init__(self):
print "b"
super(b,self).__init__()
print "~b"
b=b()
與上面不同的是,這裡的a是繼承於object的,也就是說a是新式類。在使用super之後,如果我們想要修改b的父為c,則只需要更改為:
class a(object):
def __init__(self):
print "a"
print "~a"
class b(c):
def __init__(self):
print "b"
super(b,self).__init__()
print "~b"
b=b()
也即,將class b(a)更改為class b(c)即可。總的來說,我們可以這樣使用super:
class b(c):
def func(self,arg)
super(b,self).func(arg)
哦,對了,準確地說,super並不是乙個函式,而是乙個類名,super(b,self)實際上呼叫了super類的初始化函式,產生了乙個super物件,而這個初始化函式並沒有做什麼神奇的事情,僅僅只是簡單地記錄了類型別和具體例項,關於多重繼承這裡就不贅述了,有興趣可以參考
python super()。
筆記九 python之字典
dict1 dict1 phone 12345678912 print dict1 d python python37 python.exe c users administrator desktop 小嫻python 整理 整理csdn 筆記四.py process finished with e...
python 等考之九
以下 為提示框架 請在.處使用一行或多行 替換 請在 處使用一行 替換 注意 提示框架 可以任意修改,以完成程式功能為準 輸入資料 綜合 理工 綜合 綜合 綜合 綜合 綜合 綜合 綜合 綜合 師範 理工 綜合 理工 綜合 綜合 綜合 綜合 綜合 理工 理工 理工 理工 師範 師範 綜合 師範 農林 ...
每日部落格之九月讀書筆記
今日下午剛剛於圖書館借了 程式設計師的修煉之道 從小工到專家 這本書,內容有看,但看的尚不多,匆匆讀過半章而已。但因明日就是國慶,即意味著進入十月,故暫勉強以這半章 我初識此書的拙見,以作為九月的閱讀筆記。作者在最開始強調了 責任 二字。正如作者所言,要成為乙個優秀的軟工人首先要學會 負責 學會對錯...