亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中如何使用super()函數及多重繼承

發布時間:2020-07-29 09:04:19 來源:億速云 閱讀:158 作者:小豬 欄目:開發技術

小編這次要給大家分享的是Python中如何使用super()函數及多重繼承,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

super()函數可以用于繼承父類的方法,語法如下:

super(type[, object-or-type])

雖然super()函數的使用比較簡單,但是需要根據單繼承和多繼承來分析函數的調用關系。

首先,當類之間的繼承關系為單繼承時,函數調用關系也比較簡單,可以參考如下的例子:

#!/usr/bin/env python3

class A(object):
  def __init__(self):
    print('class A')

class B(A):
  def __init__(self):
    super(B, self).__init__()
    print('class B')

b = B()

上述代碼運行結果如下:

class A
class B

從結果可以看出,子類B在實例化時調用了父類A的__init__()方法。

當進行多重繼承時,需要考慮MRO的問題。所謂MRO,即Method Resolution Order,自Python2.3以來,MRO采用廣度優先(區別于深度優先)的規則定義。為了更好的理解這個問題,讓我們先來看如下的代碼:

#!/usr/bin/env python3

class A(object):
  def __init__(self):
    self.n = 10
  
  def minus(self, m):
    print('minus in class A start')
    self.n -= m
    print('minus in class A end')

class B(A):
  def __init__(self):
    self.n = 7

  def minus(self, m):
    print('minus in class B start')
    super(B, self).minus(m)
    self.n -= 2
    print('minus in class B end')

class C(A):
  def __init__(self):
    self.n = 12

  def minus(self, m):
    print('minus in class C start')
    super(C, self).minus(m)
    self.n -= 5
    print('minus in class C end')

class D(B,C):
  def __init__(self):
    self.n = 15

  def minus(self, m):
    print('minus in class D start')
    super(D, self).minus(m)
    self.n -= 2
    print('minus in class D end')

print('The MRO of class D is :')
print(D.__mro__)

d = D()
d.minus(2)
print(d.n)

代碼運行結果:

The MRO of class D is :
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
minus in class D start
minus in class B start
minus in class C start
minus in class A start
minus in class A end
minus in class C end
minus in class B end
minus in class D end
4

從運行結果可以看出,子類D的MRO為(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>),也就是子類D的minus函數在調用父類函數時的調用順序依次為BCA,而后續的調試打印信息也正好驗證了該順序。

看完這篇關于Python中如何使用super()函數及多重繼承的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青河县| 通海县| 邵东县| 泽普县| 浑源县| 特克斯县| 万安县| 和平区| 象州县| 扬州市| 安顺市| 郸城县| 华阴市| 甘德县| 安福县| 四川省| 亚东县| 合阳县| 麻栗坡县| 离岛区| 天津市| 彩票| 台中县| 五家渠市| 富宁县| 邻水| 栖霞市| 尉氏县| 青冈县| 礼泉县| 姚安县| 湖口县| 内丘县| 自治县| 西乌| 新巴尔虎左旗| 浏阳市| 汽车| 彰武县| 安仁县| 久治县|