詳解python的super()的作用和原理:
python 中物件的定義很怪異,第乙個引數一般都命名為self,
用於傳遞物件本本身,而在呼叫的時候則不必顯示傳遞,系統會自動傳遞
今天我們介紹的主角是super(),在類的繼承裡面super()非常常用,
它解決了子類呼叫父類方法的一些問題,父類多次被呼叫只執行一次。
當存在繼承關係的時候,有時候需要在子類中呼叫父類的方法
此時最簡單的方法是把物件呼叫轉換成類呼叫,需要注意的是這時
self引數需要顯示傳遞
class fooparent:
def bar(self, message):
print(message)
class foochild(fooparent):
def bar(self, message):
fooparent.bar(self, message)
print foochild().bar("hello, python.")
這樣做有一些缺點,比如說如果修改了父類名稱,那麼在子類中會涉及多處修改,
另外,python是允許多繼承的語言,如上所示的方法在多繼承時就需要重複寫多次,
顯得累贅。為了解決這些問題,python引入了super()機制,例子**如下:
node2:/root/python/object#cat t2.py
class fooparent:
def bar(self, message):
print(message)
class foochild(fooparent):
def bar(self, message):
super(foochild, self).bar(message)
foochild().bar("hello, python.")
node2:/root/python/object#python3 t2.py
hello, python.
Python呼叫父類方法之super()
super 方法的語法 super type object or type super 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序 mro 重複呼叫 鑽石繼承 等種種問題。在super方法中包含了cj演算法 確保每個類被呼叫一次 具...
super關鍵字呼叫 「父類無參」 方法
1 子類繼承父類時,子類構造方法第一行系統會自動預設編寫super 在呼叫子類的構造方法時,先呼叫父類的無引數構造方法。2 如果父類中沒有 無引數的構造方法,那子類繼承父類時就會報錯,因子類的構造方法在預設呼叫父類無引數構造方法super 不存在。這時我們解決方式是 通過手動在子類中編寫呼叫父類有引...
重寫父類方法和呼叫父類方法
class animal object def eat self print 吃 def drink self print 喝 class dog animal def bark self print 汪汪叫 print 汪汪叫 print 汪汪叫 print 汪汪叫 print 汪汪叫 class...