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.mzph.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语言&…