python內建函式super()主要用於類的多繼承中,用來查詢並呼叫父類的方法,所以在單重繼承中用不用 super 都沒關係;但是,使用 super() 是乙個好的習慣。一般我們在子類中需要呼叫父類的方法時才會這麼用;
super(type,object-or-type)
引數:type — 類,一般是類名;
object-or-type — 類,一般是 self;
返回值:無
1.案例一:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""@author:何以解憂
@blog(個人部落格位址): shuopython.com
@wechat official account(微信***):猿說python
@github:www.github.com
@file:python_super.py
@time:2019/12/29 21:25
@motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
class a:
def m(self):
print('a')
class b:
def m(self):
print('b')
class c(a):
def m(self):
print('c')
super().m()
c().m()
輸出結果:
ca**分析:
這樣做的好處就是:如果你要改變子類繼承的父類(由a改為b),你只需要修改一行**(class c(a): -> class c(b))即可,而不需要在class c的大量**中去查詢、修改基類名,另外一方面**的可移植性和重用性也更高。
2.案例二:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""@author:何以解憂
@blog(個人部落格位址): shuopython.com
@wechat official account(微信***):猿說python
@github:www.github.com
@file:python_super.py
@time:2019/12/29 21:25
@motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
""" www.cppcns.com
class dog:
de程式設計客棧f __init__(self):
self.fly = false
def print_fly(self):
if self.fly:
print('不是普通狗,能飛')
else:
print('普用狗不會飛')
class xiaotianquan(dog):
def __init__(self):
self.sound = true
def print_singwqcbx(self):
if self.sound:
print("汪汪汪")
else:
print("假狗狗")
if __name__ == '__main__':
dog = xiaotianquan()
dog.print_sing() # 能正常輸出
dog.print_fly() # 報錯,attributeerror: 'xiaotianquan' object has no attribute 'fly'
**分析:
雖然子類xiaotianquan繼承父類dog,但是子類直接呼叫父類的print_fly函式,依然會報錯,因為子類沒有父類的fly屬性,上面**可以通過在__init__函式中呼叫super()完成,例如:
程式設計客棧class dog:
def __init__(self):
self.fly = false
def print_fly(self):
if self.fly:
print('不是普通狗,能飛')
else:
print('普用狗不會飛')
class xiaotianquan(dog):
def __init__(self):
super().__init__() # 等效 super(xiaotianquan,self).__init__()
self.fly = true
self.sound = true
def print_sing(self):
if self.sound:
print("汪汪汪")
else:
print("假狗狗")
if __name__ == '__main__':
dog = xiaotianquan()
dog.print_sing(www.cppcns.com)
dog.print_fly()
輸出結果:
汪汪汪不是普通狗,能飛
本文標題: python super函式使用方法詳解
本文位址:
Python super 函式簡介
python 內建函式 描述 super 函式是用於呼叫父類 超類 的乙個方法。super 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序 mro 重複呼叫 鑽石繼承 等種種問題。mro 就是類的方法解析順序表,其實也就是繼承父類方法時...
pythonsuper 函式的詳解
目錄 python是一門物件導向的語言,定義類時經常要用到繼承,在類的繼承中,子類繼承父類中已經封裝好的方法,不需要再次編寫,如果子類如果重新定義了父類的某一方法,那麼該方法就會覆蓋父類的同名方法,但是有時我們希望子類保持父類方法的基礎上進行擴充套件,而不是直接覆蓋,就需要先呼叫父類的方法,然後再進...
Python super 函式用法總結
了解 super 函式之前,我們首先要知道 super 的用途是啥?語法格式 super type object or type 函式描述 返回乙個 物件,它會將方法呼叫委託給 type 的父類或兄弟類。引數說明 type 類,可選引數。object or type 物件或類,一般是 self,可選...