079、類的繼承

繼承是對已有的類進行擴展創建出新的類,這個過程就叫做繼承。其中,提供繼承信息的類叫做父類(超類、基類),得到繼承信息的類稱為子類(派生類)。

基本語法

繼承是通過在類定義語句中使用圓括號來指定父類(或基類)來實現的。

如:

class Person:  def __init__(self, name, age):  self.name = name  self.age = age  def introduce(self):  print(f"Hello, my name is {self.name} and I am {self.age} years old.")  class Student(Person):  def __init__(self, name, age, student_id):  # 調用父類的__init__方法  super().__init__(name, age)  # 添加子類特有的屬性  self.student_id = student_id  def show_student_info(self):  print(f"Student Information:")  print(f"Name: {self.name}")  print(f"Age: {self.age}")  print(f"Student ID: {self.student_id}") 

如上,定義了簡單的Person類,該類有兩個基本屬性:name(名字)和age(年齡),并且有一個introduce方法用于介紹自己。Student類使用圓括號來指定繼承自Person類,并添加了一個額外的屬性student_id(學生ID)和一個方法show_student_info用于顯示學生的詳細信息。

繼承的特點

  1. 單繼承與多繼承:Python支持單繼承和多繼承。在定義類時,如果基類只有一個,則為單繼承;如果基類有多個,則為多繼承。多繼承的語法是在類定義時,將多個基類放在圓括號中,用逗號分隔。如:

    class Vehicle:  """交通工具"""def __init__(self, make, model):  self.make = make  self.model = model  def start_engine(self):  print(f"Starting the engine of the {self.make} {self.model}...")  class ElectronicDevice:  """電子設備"""def __init__(self, battery_life):  self.battery_life = battery_life  def check_battery(self):  print(f"Battery life is {self.battery_life}%.")  # Car類同時繼承自Vehicle和ElectronicDevice  
    class Car(Vehicle, ElectronicDevice):"""汽車"""def __init__(self, make, model, battery_life):  # 調用Vehicle的__init__  Vehicle.__init__(self, make, model)  # 調用ElectronicDevice的__init__  ElectronicDevice.__init__(self, battery_life)  
    

    在實際編程中,如果不是必須使用多重繼承,就盡量使用單一繼承,假如非要使用多重繼承,也要盡量避免出現菱形繼承(如一個類繼承兩個父類,但是這兩個父類又繼承同一個父類),否則代碼可讀性和可理解性將變得非常糟糕。

  2. 方法重寫(Override):子類可以定義與父類同名的方法,這種方法被稱為方法重寫。當子類對象調用這個方法時,會執行子類定義的方法,而不是父類中的方法。如:

    # 定義父類Animal  
    class Animal:  def __init__(self, name):  self.name = name  # 父類中的speak方法  def speak(self):  print(f"{self.name} makes a sound.")  # 定義子類Dog,繼承自Animal  
    class Dog(Animal):  # 重寫父類中的speak方法  def speak(self):        print(f"{self.name} says Woof!")  # 使用
    my_dog = Dog("Buddy")  
    my_dog.speak()  # 輸出: Buddy says Woof!
    
  3. super()函數super()函數是用于調用父類(超類)的一個方法。super()在子類的方法中調用父類的方法時非常有用。如在上面重寫的方法中,我們可以通過super()來調用父類方法。

    class Dog(Animal):  # 重寫父類中的speak方法  def speak(self):  # 調用父類的speak方法super().speak()  # 重寫  print(f"{self.name} says Woof!")  # 使用
    my_dog = Dog("Buddy")  
    my_dog.speak()  # 輸出: Buddy makes a sound. Buddy says Woof!
    
  4. 繼承的傳遞性:如果類C繼承自類B,類B又繼承自類A,那么類C同時繼承了類B和類A的屬性和方法。這稱為繼承的傳遞性。

總結:

繼承是一種is-a的關系,如有一個父類:Person,然后3個子類:student、teacher、programmer。它們的關系是:

a student is a person.

a teacher is a person.

a programmer is a person.

子類直接從父類繼承公共的屬性和行為,再添加自己特有的屬性和行為,所以子類一定是比父類更強大的,任何時候都可以使用子類對象去代替父類對象。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42847.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

控制周期與控制頻率

控制周期是指控制系統中執行一次完整控制循環所需的時間間隔。它表示了控制系統對輸入信號進行處理、執行控制算法、生成輸出信號并更新系統狀態的頻率。在實時控制系統中,控制周期的選擇對系統的性能和穩定性具有重要影響。較短的控制周期可以提高系統的響應速度&a…

高級java每日一道面試題-2024年7月8日

文章目錄 面試官問: final 在java中有什么作用面試者回答:1. final修飾變量基本數據類型:示例: 對象引用:示例: 2. final修飾方法示例: 3. final修飾類示例: 4. final局部變量和參數示例: 總結 …

互聯網十萬個為什么之什么是CDN?

CDN(Content Delivery Network,內容分發網絡)是一組分布在不同地理位置的服務器,其目的是更有效地向用戶分發互聯網內容。通過緩存內容(如網頁、圖片、視頻和其他類型的網絡數據)在多個服務器上&#xff0c…

學生護眼臺燈哪個牌子實用?值得入手的學生護眼臺燈十大排名分析

在這個數碼時代,人們對屏幕的依賴程度越來越高,尤其是孩子們。他們不僅在學校里需要長時間盯著教科書,還會在學習和娛樂中使用各種數碼設備。然而,這也使得眼睛健康問題逐漸凸顯,尤其是兒童近視的問題。為了保護視力&a…

Flink 提交作業的方式

參考: Flink運行方式及對比-騰訊云開發者社區-騰訊云

IP地址設置的全面指南-okeyproxy

IP地址是每個連接到互聯網的設備的唯一識別字,無論是家庭網路還是企業網路,正確設置IP地址是確保網路穩定和安全的關鍵。IP地址由一系列數字組成,通常分為IPv4和IPv6兩種格式。IPv4是最常見的形式,由四組0到255之間的數字組成&…

濟南網站建設費用為什么差距如此之大

濟南網站建設費用的差距之所以如此之大,主要是由于以下幾個因素的影響。 首先,不同的網站建設公司所提供的服務內容和質量不盡相同,這直接導致了費用的差距。一些知名的大型網絡公司會提供全方位的網站建設服務,包括網站設計、頁面…

ELFK 8.12.2 部署 -- docker部署方式?

👨?🎓博主簡介 🏅CSDN博客專家 ??🏅云計算領域優質創作者 ??🏅華為云開發者社區專家博主 ??🏅阿里云開發者社區專家博主 💊交流社區:運維交流社區 歡迎大家的加入&#xff01…

SpringBoot源碼閱讀(3)——監聽器

ApplicationListener類初始化位置 在類SpringApplication的構造方法,第267行 在META-INFO/spring.factories中配置的實現類 spring-boot # Application Listeners org.springframework.context.ApplicationListener\ org.springframework.boot.ClearCachesApplic…

Top級“水刊”!高達10.1分,發文量大,最快1個月左右錄用,幾乎沾邊可錄!

本周投稿推薦 SCI ? 能源科學類,1.5-2.0(來稿即錄25天) ? 計算機類,2.0-3.0(純正刊29天錄用) EI ? 各領域沾邊均可(2天錄用) 知網 ? 7天錄用-檢索(急錄友好&…

【YOLOv5進階】——替換主干網絡(backbone)-MobileNet為例

聲明:筆記是做項目時根據B站博主視頻學習時自己編寫,請勿隨意轉載! 一、說在前面的一些話 1、torchvision 需要用到torchvision里的一些模塊,之前第一期配置環境的時候已經安裝過torchvision! torchvision是PyTorch生態系統中的一個關鍵庫,專門為計算機視覺任務設計和優…

個性化微課教學視頻推薦系統-計算機畢業設計源碼77648

個性化微課教學視頻推薦系統 摘 要 隨著信息技術的迅猛發展,教育領域正經歷著前所未有的變革。微課作為一種新興的教學資源形式,以其短小精悍、針對性強、易于傳播等特點,逐漸受到廣大師生的青睞。然而,在微課資源日益豐富的今天…

Python語法基礎

python語法 TIPS:本文適合有一定編程語言基礎的人快速復習python基本語法 python的IO: 基礎input ainput():默認輸入 基礎output print():默認輸出 默認換行參數end""控制字母之間的距離,可以理解為默認為換行符,修改…

谷粒商城學習筆記-逆向工程錯誤記錄

文章目錄 1,Since Maven 3.8.1 http repositories are blocked.1.1 在maven的settings.xml文件中,新增如下配置:1.2,執行clean命令刷新maven配置 2,internal java compiler error3,啟動逆向工程報錯&#x…

【Linux】網絡新手村

歡迎來到 破曉的歷程的 博客 ??不負時光,不負己?? 引言 今天,我們就開始學習Linux網絡相關的內容。這篇博客作為Linux網絡板塊的第一篇博客看,我們首先要帶著大家明白Linux網絡的一些名詞的概念,為之后的學習掃清障礙。然后我…

Bootstrap 按鈕下拉菜單

Bootstrap 按鈕下拉菜單 簡介 Bootstrap 是一個流行的前端框架,用于快速開發響應式和移動設備優先的網頁。它提供了一套豐富的組件,包括導航、下拉菜單、按鈕等,使得開發者能夠輕松構建功能豐富且美觀的界面。在本文中,我們將重…

新加坡工作和生活指北:餐飲出行篇

文章首發于公眾號:Keegan小鋼 ?餐飲 前一篇文章 說到,有些房東不允許房客煮飯,那在新加坡都去哪吃飯?有什么吃的呢? 比較便宜的餐飲場所就是小販中心、咖啡店和冷氣食閣,也是大部分人常去的就餐場所。咖…

分布式整合

一、分布式架構介紹 什么是分布式系統 分布式系統指一個硬件或軟件組件分布在不同的網絡計算機上,彼此之間僅僅通過消息傳遞進行通信和協調的系統。 通俗的理解,分布式系統就是一個業務拆分成多個子業務,分布在不同的服務器節點&#xff0…

使用Java實現復雜數據結構算法

使用Java實現復雜數據結構算法 大家好,我是微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 1. 前言 在軟件開發中,復雜數據結構和算法是提升程序效率和性能的重要組成部分。本文將通過Java語言&…