当前位置: 首页 > news >正文

python系列教程245——为什么需要继承

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写(有时候有空也会参与编写),所以不如我的人工智能教程风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以看我的人工智能教程https://blog.csdn.net/jiangjunshow/article/details/77338485。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

上篇文章我们学习了什么是类的继承。那为什么我们需要继承呢?这个问题我们必须要搞懂,否则上篇文章就白学了。就像我们学习了什么是刀,明白了刀就是一块边缘很锋利的铁,但是却不知道为什么我们需要刀一样。即使拿着刀也不知道用它来干什么。当我们有一个萝卜,如果直接整个萝卜下锅煮,很难煮熟煮透,这个时候我们就需要刀这个工具来把萝卜切成一小块一小块,这样煮出的萝卜才好吃。明白了我们为什么需要刀,那么以后才能在合适的场合用刀来帮我们解决问题。同理,只有明白了为什么需要继承,那么以后才能在合适的场合用继承来帮我们解决问题。

老规矩,直接用简单的代码来帮助大家理解为什么我们需要继承。

假设你们公司要开发一款关于动物的游戏。下面的代码定义了一个简单的类来表示动物,类里面定义了一个表示吃的方法eat和一个表示睡的方法sleep。因为所有动物都要吃东西和睡觉。

class Animal:def __init__(self, name):self.name = namedef eat(self):print(f"{self.name}正在吃东西")def sleep(self):print(f"{self.name}在睡觉")

如果这时领导给你一个任务,要你定义一个表示狗的类。你会怎么做呢?

你或者有些同学可能会用下面的代码来定义一个表示狗的类。里面也有eat和sleep方法,因为狗也是动物也要吃和睡。另外还定义了一个吼叫的方法bark,因为狗很喜欢叫。

class Dog:def __init__(self, name):self.name = namedef eat(self):print(f"{self.name}正在吃东西")def sleep(self):print(f"{self.name}在睡觉")def bark(self):print(f"{self.name}在汪汪叫!")

上面的代码在逻辑上没有问题。但是,代码有些重复啰嗦了。eat和sleep这两个代码重复写了两次,在Animal类和Dog类中有一模一样的两套代码。如果领导让你定义100种动物的类,那么这两个方法你就要重复写100次。想想都手累。
在这里插入图片描述

如果使用了继承,那么我们就可以免费重复地写那100套代码。

下面就是使用继承来定义狗的类。

class Dog(Animal):def bark(self):print(f"{self.name}在汪汪叫!")

多么的简洁明了。因为继承了Animal类,所以就不需要再次定义eat和sleep了。因为是教学代码,所以Animal类里面只有2个方法,实际开发中Animal类里面可能有50个方法,那么使用继承来定义一个新类就可以让我们少写50个方法的代码。如果定义100个新类就可以少写50*100=5000个方法的代码。所以说,继承真是太有用了!大大滴提升了我们的开发效率!

在这里插入图片描述

继承允许子类直接复用父类的属性和方法,避免重复编写相同代码。这,就是为什么我们需要继承的一个重要的原因。

除了代码复用,继承还有如下一些用途。下面我简单把它们介绍一下,看不懂没有关系,后续我会写其它文章来帮助你理解。本篇文章把代码复用深刻理解了就行,一次学太多消化不了也就等于白学。

构建层次化类结构
继承通过“is-a”关系(如“狗是动物”)形成类层次,使代码逻辑更清晰。

增强扩展性
新增子类时无需修改父类代码。例如,在人事管理系统中,新增 SalesManager 类继承自 Employee ,仅需扩展销售提成逻辑,原有员工管理功能不受影响。

支持多态性
这个简单解释都没有必要了,因为别说简单解释,就是我写一整篇文章你都未必能理解得了。

多态性也很重要,但是也很难理解。下篇文章我将挑战一下,看能否让你轻轻松松地理解多态性。

写这种通俗易懂而且还要风趣幽默的文章真的很费精力,光是给你们配个合适的图都要花个把小时,就是为了让你们养养眼提提神激发你们的性趣。所以一定要给我点个不要钱的赞哦!

相关文章:

  • Linux——7.如何理解 shell
  • C#图书管理系统笔记(残缺版)
  • STM32F103C8T6 学习笔记摘要(四)
  • 前端截图并导出pdf
  • dify应用实践教程5
  • 量子机器学习前沿:量子神经网络与混合量子-经典算法
  • 【图片识别改名】自动识别图片中的文字并给图片命名 ,图片自动识别并且能重命名的操作步骤和注意事项
  • Spark基于Bloom Filter算法的Runtime Filter Join优化机制
  • 【论文阅读35】-PINN review(2021)
  • AI编程再突破,文心快码发布行业首个多模态、多智能体协同AI IDE
  • 【LeetCode】用双指针解决移除元素问题、合并两个有序数组求解
  • 基于openfeign拦截器RequestInterceptor实现的微服务之间的夹带转发
  • 搭建网站时用到的技术
  • VoiceAgent技术赋能债务重组:合规、高效、有温度的金融债务解决方案
  • Java面试复习指南:基础、并发、JVM与Spring框架
  • 零基础学习RabbitMQ(2)--Linux安装RabbitMQ
  • 硬件工程师笔试面试高频考点汇总——(2025版)
  • (LeetCode 面试经典 150 题) 27.移除元素
  • Spring Boot:运用Redis统计用户在线数量
  • 百度AIP:Springboot人脸对比
  • 购车网站设计/百度流量统计
  • 台前网站建设/google海外版
  • 河南中原建设网站微信群/百度seo优化关键词
  • 做单页网站容易排名吗/seo查询网站
  • gis做图网站/长春seo快速排名
  • wap网址是什么意思/上海seo优化公司 kinglink