在Python中使用super函數,以及多重繼承和組合

2021-01-15 溪流在心中

[ 使用 super 函數]

super 函數能夠自動找到基類的方法,而且還傳入了 self參數:

代碼進行如下修改

class Shark(Fish):

def _ _init_ _(self):

super(). _ _init _ _()

self.hungry = True

運行後得到同樣的結果:

>>> shark = Shark()

>>> shark.move()

我的位置是: 6 1

>>> shark.move()

我的位置是: 5 1

super 函數的「超級」之處在於:不需要明確給出任何基類的名字,它會自動找出所有基類以及對應的方法。由於不用給出基類的名字,這就意味著如果需要改變類繼承關係,只要改變class語句裡的父類即可,而不必在大量代碼中去修改所有被繼承的方法。

[多重繼承]

除此之外,Python 還支持多繼承,就是可以同時繼承多個父類的屬性和方法。多重繼承的語法如下:

class 類名(父類1,父類2,父類3,...):

舉個例子:

>>>class Basel:

def fool(self):

print("我是fool,我在Basel中...」)

>>>class Base2:

def foo2(self):

print("我是foo2,我在Base2中..")

>>> class C(Basel, Base2):

pass

>>> c = C()

>>> c.foo1()

我是foo1,我在Basel中...

>>> c.foo2()

我是foo2,我在Base2中..

但多重繼承很容易導致代碼混亂,所以當不確定是否必須使用多重繼承的時候,請儘量避免使用它,因為有些時候會出現不可預見的Bug

[組合]

前面先是學習了繼承的概念,然後又學習了多重繼承,但聽到「大牛們」強調說,不到必要的時候不使用多重繼承。哎呀,這可讓大家煩惱死了,就像我們有了烏龜類、魚類,現在要求定義一個類,叫水池,水池裡要有烏龜和魚。用多重繼承就顯得很奇怪,因為水池和烏龜、魚是不同物種,那要怎樣才能把它們組合成一個水池的類呢?

在 Python 裡其實很簡單,直接把需要的類放進去實例化就可以了,這就叫組合:

class Turtle:

de f _ _init_ _(self,x):

self.num ×

class Fish:

de f _ _init_ _ (self, x):

self.num = X

class Pool:

def _ _init_ _ (self,x,y):

self.turtle = Turtle(x)

self.fish = Fish(y)

def print_num(self):

print ("水池裡總共有烏龜%d只,小魚%d條!"&%(self.turtle.num,self.fish.num))

程序實現如下:

>>>pool = Pool(1,10)

>>>pool.print_num()

水池裡總共有烏龜1隻,小魚10條!

歡迎留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 使用Python super方法為您的類增強
    在本教程中,您將了解以下內容:Python中的繼承概念Python中的多重繼承super()功能如何工作super()單繼承中的函數如何工作super()多繼承中的函數如何工作免費獎勵: 關於Python掌握的5個想法,Python開發人員的免費課程,向您展示將Python技能提升到新水平所需的路線圖和思維模式。
  • python中類的繼承和多態
    繼承是為了代碼復用和設計復用而設計的,是面向對象程序設計的重要特徵之一。當我們設計一個新類時,如果可以繼承一個已有的設計良好的類然後進行二次開發,無疑會大幅度減少開發工作量。1.類的繼承類繼承語法:Class 派生類名(基類名): #基類名寫在括號裡派生類成員在繼承關係中,已有的,設計好的類稱為父類或基類,新設計的類稱為子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。
  • 【4】類的繼承和多態-簡易的Python面向對象教程
    面向對象(2) - 實例方法 (本文) 面向對象(3) - 類屬性和類方法 面向對象(4) - 繼承和多態,以及一個綜合小遊戲案例
  • 三分鐘看懂Python和Java的區別
    今天就來教大家三分鐘看懂Python和Java的區別。1、對象就面向的對象而言,Java語言的設計集中於對象及其接口,提供了類機制以及動態的接口模型。對象中封裝了它的狀態變量以及相應的方法,實現了模塊化和信息隱藏;而類則提供了一類對象的原型,並且通過繼承機制,子類可以使用父類所提供的方法,實現了代碼的復用。
  • Python基礎教程(一) - 函數和函數式編程
    什麼是函數函數是對程序邏輯進行結構化或過程化的一種編程方法。能將整塊代碼巧妙地隔離成易於管理的小塊,把重複的代碼放在函數中而不是進行大量的copy。前面使用過很多print()來進行列印,這是python提供的內建函數,你也可以自己創建函數,這叫做用戶自定義函數。創建函數你可以定義一個由自己想要功能的函數,用def語句來創建,標題行由def關鍵字,函數的名字,以及參數的集合(如果有的話)組成。
  • python測試函數模塊unittest
    1.測試函數在編寫完代碼後進行對代碼測試是否有錯誤2.pytho標準庫中的模塊unittest為代碼測試工具例如:name_function.py 模塊名def get_formatted_name(first, last): full_name = first + ' ' + last
  • 淺析java繼承與多態,抽象類與接口的區別
    一、繼承extends 關鍵字表示繼承某個已存在的類,已存在的類稱為「超類」、「基類」、或「父類」,而新繼承的類稱為「子類」、「派生類」。子類可以方法父類中的所有非 private 域,也即子類通過繼承獲得了父類具有的特性和能力。
  • Python零基礎入門教程,如何使用lambda、filter和map函數?
    大綱函數類型定義及特性lambda函數定義及使用filter函數定義及使用map函數定義及使用引入函數類型概念函數類型定義:python中任意一個函數都有數據類型,這種數據類型是function(函數類型)
  • Python裝飾器以及高級用法
    你在本教程中看到的一些代碼將會有一些複雜。大多數人在學習Python時都跟裝飾器做過鬥爭,所以如果這對你來說很奇怪,不要感到沮喪,因為同樣的大多數人都可以克服這種苦難。在本教程中,我將逐步介紹了解裝飾器的過程。首先我假設你已經可以編寫基本函數和基本類。如果你不能做這些事,那麼我建議你在回到這裡之前先學習如何去做到編寫基本函數和基本類(除非你迷路了,在這種情況下你可以原諒)。
  • Java面向對象之:封裝、繼承、多態
    即便不允許多繼承,但是多重繼承是被允許的。以下是一個多重繼承的例子:動物有胎生動物和卵生動物之分,胎生動物有老虎,老虎又分華南虎,東北虎,孟加拉虎等。>最終,華南虎通過多重繼承獲得了老虎、胎生動物、動物的特徵和行為。
  • python基礎知識科普:python的起源和發展史以及應用場景
    從一出生,Python已經具有了 :類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進位代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。當你運行你的程序的時候,連接/轉載器軟體把你的程序從硬碟複製到內存中並且運行。而Python語言寫的程序不需要編譯成二進位代碼。你可以直接從原始碼運行程序。
  • Python獲取類的層次結構和繼承順序
    前情提要今天,我們繼續領略inspect模塊的一些高級用法——使用inspect模塊獲取一個類的層次結構和類的繼承順序。這是講了返回值參數「unique」默認為False,如果為True,則給定列表中每個類的返回結構中只會出現一個條目。否則,使用多重繼承的類及其子代將多次出現。這裡講參數怎麼樣?是不是很複雜,其實它就是根據一個給定的類或者基類,創建一個類似樹的數據結構,返回列表中,各個元素可能是一個包含類及其基類的元組,也可能是另一個包含子類元組的列表。
  • 一元線性回歸分析python - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • python高階函數:map、filter、reduce的替代品
    根據單詞長度,使用sorted函數對一個列表進行排序。其中將len函數傳給key參數,具體示例如下:這裡需要特別提示一下,任何單參數函數都能作為key參數的值。在函數式編程中,大家最熟悉的高階函數主要有map函數、filter函數、reduce函數和apply函數。
  • python中函數的運用(1)
    你提供一個數值,或者一個字符串,或者提供一個功能,或者子函數,然後函數輸出一個變量或者其他應該輸出的內容 我們先從最簡單的開始,就先計算加,減,乘,除中的一個。 我們先來計算加法。 比如我們計算1.5+2。
  • Java基礎,類的繼承,粗略的理解希望對大家有所幫助!
    通常我們把實現繼承的類,也就是繼承者,稱為子類,也叫派生類,而被繼承的類,也就是貢獻者,稱為父類,也叫超類或基類。在權限允許的前提下,通過繼承,子類可以使用父類中的方法和變量。這裡要注意的是,並不是所有都能繼承,可以繼承的包括普通方法和屬性,但是構造器、私有方法則不能被繼承。
  • Python每天一分鐘:lambda表達式 (匿名函數)及用法詳解
    lambda表達式介紹python中有一種靈活,便捷的且具有函數功能的表達式:lambda表達式!,它可以在程序中被傳遞和調用。一個lambda表達式範例本例中使用了多種python的小技巧,包括python推導式,map函數,lambda表達式等。
  • python一元線性回歸分析專題及常見問題 - CSDN
    python多重線性回歸分析多重線性回歸分析定義多重線性回歸模型:Mulitiple Linear Regression多元線性回歸模型:MultivariateLinear Regression數據準備#多重線性回歸#數據準備import pandas as pddf=pd.read_csv('e:/python/out/corr.csv',encoding='utf8')df根據預測目標,確定自變量和因變量#多重線性回歸
  • python的內置函數:int()轉換成整型
    前言在Java中有強制類型轉換,我們可以利用Integer.parseInt()將一個對象轉換成int類型。在python中是利用內置函數int()來將一個對象轉換成整型。python的內置函數int的使用1.內置函數int()語法classint(x,base=10),其中x為一個字符串或數字,base來表示x是以什麼進位的數據來表示的。x數字參數可以是整數、浮點數(小數點表示和指數e表示皆可), 字符串參數僅能包含在指定進位下所涵蓋的字符,該參數可省略。
  • 使用Python中的線性回歸通過語音診斷帕金森氏病
    本文,我們將創建一個簡單的python機器學習算法,以便能夠通過聲音來診斷該人是否為患者。我們將使用一組(健康者和帕金森病患者)音頻文件庫,通過對音頻進行一些測量來構建我們的機器學習數據集。建立機器學習數據集後,我們將使用SciKit Learn庫訓練線性回歸模型。最後,我們將構建一個python庫,這個庫可以輕鬆集成到其他應用程式中。數據集首先,我們需要將音頻文件轉換成包含音頻測量值以及患者是否健康標誌的表格。