Python基礎之面向對象:3、繼承與派生

来源:https://www.cnblogs.com/kangssssh/archive/2022/11/03/16855176.html
-Advertisement-
Play Games

面向對象 一、三大特征之繼承 python三大特征: 封裝、繼承、多態 三者中繼承最為核心,實際應用多,感受較為直觀 封裝和多態略微抽象 1、繼承的概念 繼承的含義: ​ 在現實生活中,繼承表示人與人之間資源的從屬關係 ​ 例如:兒子繼承父親 ​ 在編程的世界中,繼承表示類與類之間的資源從屬關係 ​ ...


面向對象

一、三大特征之繼承

  • python三大特征:

    • 封裝、繼承、多態
  • 三者中繼承最為核心,實際應用多,感受較為直觀

  • 封裝和多態略微抽象

image

1、繼承的概念

繼承的含義:

​ 在現實生活中,繼承表示人與人之間資源的從屬關係

​ 例如:兒子繼承父親

​ 在編程的世界中,繼承表示類與類之間的資源從屬關係

​ 例如:類a繼承類b

繼承的目的:

​ 在現實生活中,兒子繼承了附件就擁有了父親所有資源的支配許可權

​ 在編程世界中,類A繼承了類B就擁有了類B中所有的數據和方法使用許可權

2、繼承的本質

​ 繼承本質應該分為兩部分:

​ 當多個類中含有相同部分時,我們就把相同的部分抽離出去,將相同的部分新成一個新的類,在用剛纔被抽離出去相同部分的類,去繼承新的那部分,這樣的好處就是,當多個類需要一個相同用的功能時,可以節省代碼,不用反覆編寫

​ 抽象:將多個類相同的東西抽出去,形成一個新的類

​ 繼承:將多個類繼承剛剛抽取出來的新的類

對象>>>:數據與功能的結合體

類(子類)>>>:多個對象相同功能和數據的結合體

父類>>>:多個子類相同功能和數據的結合體


本質:類、父類的本質都是為了節省代碼,減少重覆編寫相同代碼的時間,使用時更為方便

image

3、繼承的實操

  • 在定義類的時候,類名後方可加括弧,早括弧內填入其他它類的名字,就意味著繼承了其它類

  • python支持多類繼承,括弧內可填寫多個類名,只需用逗號隔開即可

# 1、定義兩個類,其中一個假設為父類,另一個假設為子類
class Father: 
    money = 99999999
    house = '老北京四合院'  # 父類中數據強大

class Son:
    pass  # 子類中空空如也


# 2、父類中的數據,子類無權直接使用,當我們在子類中繼承父類後,子類和子類產生的對象都可以通過'點'的方式使用父類中的數據
class Father:
    money = 99999999
    house = '老北京四合院'


class Son(Father):
    pass

# 子類直接使用父類中的數據
print(Son.money)
# 子類產生的對象使用父類中的數據
obj1 = Son()
print(obj1.money)
------------------------------------------------------------------------------------
99999999
99999999

4、繼承後名字查找的順序

未繼承:

​ 對象(object)自身名稱空間>>>類的名稱空間

單線繼承:

​ 對象(object)自身名稱空間>>>子類的名稱空間>>>父類的名稱空間

多線繼承:

​ 1、菱形繼承: (廣度優先,最後才會找閉環的定點)

​ 對象自身名稱空間>>>子類名稱空間>>>父類名稱空間(形參內由左至右)>>>閉環

​ 2、非菱形繼承: (深度優先)

​ 對象自身名稱空間>>>子類名稱空間>>>父類名稱空間(形參內由左至右)

	在一個子類綁定多個父類時,名字的查找順序可能比較難理解,針對這個問題,可以使用python中內置方法:mor()   
	通過對象名點mor() 的方式,可以幫助我們查看名字的查找順序

image

5、經典類與新式類

經典類:

​ 不繼承object的類或者其子類的類

新式類:

​ 繼承object或者其之類的類

​ 在python3中,只有新式類,所有類都預設繼承object

​ 在python2中,區分經典類和新式類

在以後我們定義類的時候,如果沒有明確的父類,可以在類的括弧內填入object,這樣話能夠提高我們代碼的相容性

二、派生

1、派生的概念

​ 派生是指,子類繼承父類,派生出自己的屬性與方法,並且重用父類的屬性與方法

2、派生的方法

1.直接引用父類的__ init __為其傳參,並添加子類屬性

​ 缺點:代碼重覆率太高,浪費資源,時間

class People:
    school = '清華大學'
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

class Teacher(People):
    def __init__(self, name, sex, age, title): #派生
        self.name = name
        self.sex = sex
        self.age = age
        self.title = title
    def teach(self):
        print(f'{self.name}是老師')

obj = Teacher('lili','female', 28, '高級教師') 
#只會找自己類中的__init__
print(obj.name, obj.sex, obj.age, obj.title)  
#lili female 28 高級教師

2.通過super()來只想父類的屬性

​ super()是一個特殊的類,在子類__ init __內調用super得到一個對象,該對象指向父類的名稱空間

class Teacher(People):
    def __init__(self, name, sex, age, title):
        super().__init__(name, age, sex)
        #調用的是綁定方法,自動傳入self
        self.title = title
	 def teach(self):
         print(f'{self.name}是老師')
            
            
obj = Teacher('lili','female', 28, '高級教師') 

註意:在python2中super 的使用需要完整地寫成super(自己的類名,self),而在python3中可以簡寫為super()。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 yyg-cli 是什麼 yyg-cli 是優雅哥開發的快速創建 vue3 項目的腳手架。在 npm 上發佈了兩個月,11月1日進行了大升級,發佈 1.1.0 版本:支持創建 vue3 全家桶項目和 vue3 組件庫項目。具體如下: vue3 全家桶項目 使用 yyg-cli 創建的 vue3 全 ...
  • 邏輯導航 1.當在前端輸入用戶名和密碼之後,點擊登錄,後端校驗完畢返回前端 2.前端拿到需要首先做個判斷,判斷用戶是否輸入用戶名和密碼,未輸入則發出提示;輸入了則發送post請求給後端,校驗用戶名和密碼 3.校驗通過,前端拿到後端返回的token和用戶名等數據 4.登錄成功,則關閉登錄框,同時,在登 ...
  • 大部分同學都用過 CSS 的屏幕寬度媒體查詢,像是這樣: @media screen and (min-width: 900px) { div { padding: 1rem 3rem; } } 這裡表示的是與屏幕寬度相關的樣式設置,上面的代碼表示當屏幕寬度大於 900px 時,內部的樣式代碼塊才能 ...
  • 邏輯導航 1.當點擊頁面主頁的登錄/註冊按鈕時,彈出登錄/註冊模態框 2.登錄/註冊模態框也是一個小組件,在組件文件夾內創建對應組件 3.然後需要將該組件傳到header(頭部)組件內(進行相關的導入和註冊) 4. 補充子傳父組件語法 在子組件內 當點擊子組件里的東西時,傳遞給父組件一個事件,父組件 ...
  • 本文主要記錄 Vue.js 中的 Vuex,Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 ...
  • 當我們使用vuex的時候,時不時能看到“更改Vuex中的store中的狀態唯一辦法就是提交mutations”,但是有沒有試想過,我們不提交mutations其實也能修改state的值?答案是可以的 我們可以直接使用如下方式; this.$store.state.num=666; 其中,這樣修改的話 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 for in 和 for of 相對於大家肯定都不陌生,都是用來遍歷屬性的沒錯。那麼先看下麵的一個例子: 例1 const obj = { a: 1, b: 2, c: 3 } for (let i in obj) { console.l ...
  • 一、Yarn 產生的背景 Hadoop2 之前是由 HDFS 和 MR 組成的,HDFS 負責存儲,MR 負責計算。 一)MRv1 的問題 耦合度高:MR 中的 jobTracker 同時負責資源管理和作業控制兩個功能,互相制約。 可靠性差:管理節點是單機的,有單點故障的問題。 資源利用率低:基於 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...