欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python類繼承及super()函數使用說明

 更新時間:2022年11月24日 09:12:45   作者:waifdzdn  
這篇文章主要介紹了Python類繼承及super()函數使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Python中單類繼承

Python是一門面向對象的編程語言,支持類繼承。

新的類稱為子類(Subclass),被繼承的類稱為父類、基類或者超類。子類繼承父類后,就擁有父類的所有特性。

類繼承的簡單例子:

普通類方法繼承

class Fruit():
? ? def color(self):
? ? ? ? print("colorful")

class Apple(Fruit):
? ? pass

class Orange(Fruit):
? ? pass

apple = Apple()
orange = Orange()
apple.color()
orange.color()

# 輸出
# colorful
# colorful

這里Fruit為父類,Apple和Orange為子類,子類繼承了父類的特性,因此Apple和Orange也擁有Color方法。

子類除了可以繼承父類的方法,還可以覆蓋父類的方法:

class Fruit():
? ? def color(self):
? ? ? ? print("colorful")

class Apple(Fruit):
? ? def color(self):
? ? ? ? print("red")

class Orange(Fruit):
? ? def color(self):
? ? ? ? print("orange")

apple = Apple()
orange = Orange()
apple.color()
orange.color()

# 輸出
# red
# orange

子類可以在繼承父類方法的同時,對方法進行重構。

這樣一來,子類的方法既包含父類方法的特性,同時也包含子類自己的特性:

class Fruit():
? ? def color(self):
? ? ? ? print("Fruits are colorful")

class Apple(Fruit):
? ? def color(self):
? ? ? ? super().color()
? ? ? ? print("Apple is red")

class Orange(Fruit):
? ? def color(self):
? ? ? ? super().color()
? ? ? ? print("Orange is orange")

apple = Apple()
orange = Orange()
apple.color()
orange.color()

# 輸出
# Fruits are colorful
# Apple is red
# Fruits are colorful
# Orange is orange

初始化函數繼承

如果我們需要給類傳入參數,需要使用初始化函數。如果所有子類中部分參數是相同的,那么可以在父類的初始化函數中定義這些參數,然后子類繼承父類的初始化函數,這樣所有子類就可共享這些參數,而不需要在每個子類中單獨定義。

初始化函數的繼承:

class Fruit():
? ? def __init__(self, color, shape):
? ? ? ? self.color = color
? ? ? ? self.shape = shape

class Apple(Fruit):
? ? def __init__(self, color, shape, taste):
? ? ? ? Fruit.__init__(self, color, shape) # 等價于super().__init__(color, shape)
? ? ? ? self.taste = taste
? ??
? ? def feature(self):
? ? ? ? print("Apple's color is {}, shape is {} and taste {}".format(
? ? ? ? ? ? self.color, self.shape, self.taste))

class Orange(Fruit):
? ? def __init__(self, color, shape, taste):
? ? ? ? Fruit.__init__(self, color, shape)
? ? ? ? self.taste = taste
? ??
? ? def feature(self):
? ? ? ? print("Orange's color is {}, shape is {} and taste {}".format(
? ? ? ? ? ? self.color, self.shape, self.taste))

apple = Apple("red", "square", "sour")
orange = Orange("orange", "round", "sweet")
apple.feature()
orange.feature()

# 輸出
# Apple's color is red, shape is square and taste sour
# Orange's color is orange, shape is round and taste sweet

Python中多類繼承

在單類繼承中,super()函數用于指向要繼承的父類,且不需要顯式的寫出父類名稱。

但是在多類繼承中,會涉及到查找順序(MRO)、鉆石繼承等問題。

MRO 是類的方法解析順序表, 也就是繼承父類方法時的順序表。

鉆石繼承

? ? A
? ?/ \
? B ? C
? ?\ /
? ? D

如圖所示,A是父類,B和C繼承A,D繼承B和C。

下面舉例說明鉆石繼承的繼承順序

class Plant():
? ? def __init__(self):
? ? ? ? print("Enter plant")
? ? ? ? print("Leave plant")

class Fruit(Plant):
? ? def __init__(self):
? ? ? ? print("Enter Fruit")
? ? ? ? super().__init__()
? ? ? ? print("Leave Fruit")

class Vegetable(Plant):
? ? def __init__(self):
? ? ? ? print("Enter vegetable")
? ? ? ? super().__init__()
? ? ? ? print("Leave vegetable")

class Tomato(Fruit, Vegetable):
? ? def __init__(self):
? ? ? ? print("Enter Tomato")
? ? ? ? super().__init__()
? ? ? ? print("Leave Tomato")

tomato = Tomato()
print(Tomato.__mro__)


# 輸出
# Enter Tomato
# Enter Fruit
# Enter vegetable
# Enter plant
# Leave plant
# Leave vegetable
# Leave Fruit
# Leave Tomato
# (<class '__main__.Tomato'>, <class '__main__.Fruit'>, <class '__main__.Vegetable'>, <class '__main__.Plant'>, <class 'object'>)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 使用Python的Dataframe取兩列時間值相差一年的所有行方法

    使用Python的Dataframe取兩列時間值相差一年的所有行方法

    今天小編就為大家分享一篇使用Python的Dataframe取兩列時間值相差一年的所有行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python 獲取異常(Exception)信息的幾種方法

    Python 獲取異常(Exception)信息的幾種方法

    這篇文章主要介紹了Python 獲取異常(Exception)信息的幾種方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python編程學習np.float 被刪除的問題解析

    python編程學習np.float 被刪除的問題解析

    這篇文章主要為大家介紹了python編程學習np.float 被刪除的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 使用Python實現一鍵往Word文檔的表格中填寫數據

    使用Python實現一鍵往Word文檔的表格中填寫數據

    在工作中,我們經常遇到將Excel表中的部分信息填寫到Word文檔的對應表格中,以生成報告,方便打印,所以本文小編就給大家介紹了如何使用Python實現一鍵往Word文檔的表格中填寫數據,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • Selenium結合BeautifulSoup4編寫簡單的python爬蟲

    Selenium結合BeautifulSoup4編寫簡單的python爬蟲

    這篇文章主要介紹了Selenium結合BeautifulSoup4編寫簡單的python爬蟲,幫助大家更好的理解和學習python 爬蟲的相關知識,感興趣的朋友可以了解下
    2020-11-11
  • python文本數據處理學習筆記詳解

    python文本數據處理學習筆記詳解

    這篇文章主要為大家詳細介紹了python文本數據處理學習筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python的歷史與優(yōu)缺點整理

    Python的歷史與優(yōu)缺點整理

    在本篇文章里小編給大家分享的是關于Python優(yōu)缺點及基礎知識點整理內容,有需要的朋友們可以參考下。
    2020-05-05
  • Python表格處理模塊xlrd在Anaconda中的安裝方法

    Python表格處理模塊xlrd在Anaconda中的安裝方法

    本文介紹在Anaconda環(huán)境下,安裝Python讀取.xls格式表格文件的庫xlrd的方法,xlrd是一個用于讀取Excel文件的Python庫,本文介紹了xlrd庫的一些主要特點和功能,感興趣的朋友一起看看吧
    2024-04-04
  • Python 中的lambda函數介紹

    Python 中的lambda函數介紹

    Lambda函數,即Lambda 表達式(lambda expression),是一個匿名函數(不存在函數名的函數),這篇文章主要介紹了Python lambda函數的基礎知識,需要的朋友可以參考下
    2018-10-10
  • Pycharm關于遠程JupyterLab以及JupyterHub登錄問題

    Pycharm關于遠程JupyterLab以及JupyterHub登錄問題

    這篇文章主要介紹了Pycharm關于遠程JupyterLab以及JupyterHub登錄問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論