1. 程式人生 > 程式設計 >python super函式使用方法詳解

python super函式使用方法詳解

一、super函式簡介

python內建函式super()主要用於類的多繼承中,用來查詢並呼叫父類的方法,所以在單重繼承中用不用 super 都沒關係;但是,使用 super() 是一個好的習慣。一般我們在子類中需要呼叫父類的方法時才會這麼用;

二、super函式語法

super(type,object-or-type)

引數:

type — 類,一般是類名;

object-or-type — 類,一般是 self;

返回值:無

三、super函式使用

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()

輸出結果:

C

A

程式碼分析:

這樣做的好處就是:如果你要改變子類繼承的父類(由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:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
"""
 
class Dog:
  def __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_sing(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() 
  dog.print_fly()

輸出結果:

汪汪汪

不是普通狗,能飛