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.mfbz.cn/a/781035.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL第三天作业

一、在数据库中创建一个表student,用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 1、向student表中添加一条新记录 记录中id字段的值为1,name字段的值为"monkey"…

哲讯SAP知识分享:SAP资产模块常用事务代码清单

在当今日益复杂的商业环境中,企业对于资产管理的需求日益增强。SAP作为全球领先的企业管理软件提供商,其资产模块(AM)以其高效、灵活的特性,为企业提供了全面的资产管理解决方案。本文将对SAP资产事务类型进行详细介绍…

阿贝云免费虚拟主机和免费云服务器评测

阿贝云是一家提供免费虚拟主机和免费云服务器的服务提供商,为用户提供高性能的云计算服务。阿贝云的免费虚拟主机拥有稳定的性能和强大的安全性,用户可以轻松搭建自己的网站并享受无限的流量和空间。免费云服务器则提供了更强大的计算能力和灵活的配置选…

Samtec汽车电子 | 汽车连接器如何在高要求、极端的环境中工作

【摘要/前言】 汽车电子,这些年来始终是极具流量的热门话题,目前不断发展的智能座驾、辅助驾驶等赛道都是对相关产业链需求的进一步刺激,这里蕴含着一片广阔的市场。 同样,广阔的市场里有着极高的准入门槛和事关安全的技术挑战。…

买的Google账号登录,修改辅助邮箱收不到验证码?可能是个简单的错误

这篇文章分享一个案例,购买了谷歌账号以后如何修改辅助邮箱,修改辅助邮箱的一些要点,以及常见的一个错误。 一、案例回放 这个朋友昨天在我的一个视频下面留言说买了谷歌账号以后,想修改辅助邮箱地址,但是输入了辅助…

基于模型预测控制的PMSM系统速度环控制理论推导及仿真搭建

模型预测控制(Model Predictive Control, MPC)是一种先进的控制策略,广泛应用于工业控制中。它可以看作是一种最优控制方法,利用对象的动态模型来预测其状态的未来行为,并根据每个采样时间点特定性能目标函数的优化来确…

单片机软件架构连载(3)-typedef

今天给大家讲typedef,这个关键字在实际产品开发中,也是海量应用。 技术涉及知识点比较多,有些并不常用,我们以贴近实际为原则,让大家把学习时间都花在重点上。 1.typedef的概念 typedef 是 C 语言中的一个关键字&…

java wait, notify, notifyAll三个方法

wait(), notify(), 和 notifyAll() 是 Java 中用于线程间通信和同步的方法,它们都是 Object 类中的方法,而非 Thread 类的方法。这些方法通常与 synchronized 关键字一起使用,用于实现线程之间的协作和互斥访问共享资源。 关于生产者-消…

Apache Seata配置管理原理解析

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata配置管理原理解析 说到Seata中的配置管理,大家可能会想到Seata中适配…

传统IO和NIO文件拷贝过程

参考:https://blog.csdn.net/weixin_57323780/article/details/130250582

几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)回归预测,python预测全家桶再更新!...

截止到本期,一共发了9篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下: 1.终于来了!python机器学习预测全家桶 2.机器学习预测全家桶-Python,一次性搞定多/单特征输入,多/单步预测!最强模板&a…

【网络安全】实验三(基于Windows部署CA)

一、配置环境 打开两台虚拟机,并参照下图,搭建网络拓扑环境,要求两台虚拟的IP地址要按照图中的标识进行设置,并根据搭建完成情况,勾选对应选项。注:此处的学号本人学号的最后两位数字,1学号100…

《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数

这道题是送分题。因为循环方式已经写到很清楚,大家照抄就可以了。 但是如果说光照抄可是会有问题。比如我们来演示一下。 import turtleturtle.penup() turtle.goto(-175, 50 * math.sin((-175 / 100 * 2 * math.pi))) turtle.pendown() for x in range(-175, 176…

k8s学习之cobra命令库学习

1.前言 打开k8s代码的时候,我发现基本上那几个核心服务都是使用cobra库作为命令行处理的能力。因此,为了对代码之后的代码学习的有比较深入的理解,因此先基于这个库写个demo,加深对这个库的一些理解吧 2.cobra库的基本简介 Git…

算法设计与分析 实验5 并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 (一)基准算法 (二)高效算法 五、实验结论 一、实验目的 1. 掌握图的连通性。 2. 掌握并查集的基本原理和应用。 二、问题描述 在图论中,一条边被称…

IDEA发疯导致maven下载回来的jar不完整zip END header not found

IDEA发疯导致maven下载回来的jar不完整zip END header not found 具体报错 java: 读取D:\mavenRepository\com\alibaba\druid-spring-boot-starter\1.2.23\druid-spring-boot-starter-1.2.23.jar时出错; zip END header not foundjava: java.lang.RuntimeException: java.io.…

Python视觉轨迹几何惯性单元超维计算结构算法

🎯要点 🎯视觉轨迹几何惯性单元超维计算结构算法 | 🎯超维计算结构视觉场景理解 | 🎯超维计算结构算法解瑞文矩阵 | 🎯超维矢量计算递归神经算法 🍪语言内容分比 🍇Python蒙特卡罗惯性导航 蒙…

【感谢告知】本账号内容调整,聚焦于Google账号和产品的使用经验和问题案例分析

亲爱的各位朋友: 感谢您对本账号的关注和支持! 基于对朋友们需求的分析和个人兴趣的转变,该账号从今天将对内容做一些调整,有原来的内容改为Google(谷歌)账号和产品的使用经验,以及相关问题的…

LeetCode 744, 49, 207

目录 744. 寻找比目标字母大的最小字母题目链接标签思路代码 49. 字母异位词分组题目链接标签思路代码 207. 课程表题目链接标签思路代码 744. 寻找比目标字母大的最小字母 题目链接 744. 寻找比目标字母大的最小字母 标签 数组 二分查找 思路 本题比 基础二分查找 难的一…

《python程序语言设计》2018版第5章第53题利用turtle绘制sin和cos函数 sin蓝色,cos红色和52题类似

直接上题和代码 5.53 (Turtle:绘制sin和cos函数)编写程序绘制蓝色的sin函数和红色的cos函数。 代码和结果 turtle.speed(10) turtle.penup() # sin 用蓝色 turtle.color("blue") #这道题和上道题一样,先把turtle放到起始…