15分钟学Python 第22天 :继承与多态

news/2024/11/17 15:54:48/

Day 22:继承与多态

一、继承

1. 什么是继承?

继承是一种从已有类(父类或基类)创建新类(子类或派生类)的机制。子类可以获得父类的所有属性和方法,并且还可以增加新的属性和方法,或者重写父类的方法。

2. 继承的类型
  • 单继承:一个子类只有一个父类。
  • 多重继承:一个子类可以有多个父类。
  • 层次继承:多个子类继承同一个父类。
3. 继承的语法
python">class Parent:def __init__(self, name):self.name = namedef greet(self):return f"Hello, my name is {self.name}."class Child(Parent):def greet(self):return f"Hi, I'm {self.name}!"

二、示例代码

python"># 父类
class Animal:def __init__(self, name):self.name = namedef speak(self):return "Generic animal sound."# 子类
class Dog(Animal):def speak(self):return "Woof!"class Cat(Animal):def speak(self):return "Meow!"# 创建对象
dog = Dog("Buddy")
cat = Cat("Mittens")# 方法调用
print(dog.speak())  # 输出: Woof!
print(cat.speak())  # 输出: Meow!

三、代码运行流程图

下面是上面代码的运行流程图:

+-----------------+
|   Animal Class  |
+-----------------+|v
+-----------------+
|     Dog Class   | <----+
+-----------------+       |
|  speak()        |       |
+-----------------+       ||                   |v                   |"Woof!"              ||
+-----------------------+
|     Cat Class         |
+-----------------------+
|  speak()              |
+-----------------------+|v"Meow!"

四、如何使用继承

1. 共享代码

通过继承,可以在子类中重用父类的方法和属性,这样可以减少代码的重复。

2. 扩展功能

子类可以添加新的方法和属性,扩展父类的功能。

3. 方法重写

子类可以重写父类的方法,以实现特定的功能。

五、实例:动物类

构建一个动物管理系统,展示继承的强大之处。

python">class Animal:def __init__(self, name, age):self.name = nameself.age = agedef make_sound(self):raise NotImplementedError("Subclass must implement abstract method.")class Dog(Animal):def make_sound(self):return "Woof!"class Cat(Animal):def make_sound(self):return "Meow!"animals = [Dog("Buddy", 3), Cat("Whiskers", 2)]for animal in animals:print(f"{animal.name} says: {animal.make_sound()}")

六、提纲摘要

主题描述示例
继承概念从父类创建子类class Child(Parent): ...
单继承一个父类对应一个子类class B(A): ...
多重继承一个子类对应多个父类class C(A, B): ...
方法重写子类重新定义父类的方法def method(self): ...
代码复用子类可以使用父类的方法和属性super().__init__()

七、多态

1. 什么是多态?

多态是指不同类的对象可以通过相同的接口进行访问。这意味着你可以用同样的方式调用不同类中的方法,而不需要了解具体的实现细节。

2. 多态的例子

通过上面的动物类示例,我们可以使用相同的方法访问所有动物,不论它们的具体类型。

python">for animal in animals:print(animal.make_sound())

这段代码将会输出每个动物的声音,尽管我们不知道每个动物对象的具体类型。

八、如何实现多态

  1. 定义相同名称的方法:确保不同类中有同名的方法。
  2. 使用基类的引用:通过基类的引用操作子类对象。

九、实例:多态实现

python">class Bird(Animal):def make_sound(self):return "Chirp!"animals = [Dog("Buddy", 3), Cat("Whiskers", 2), Bird("Tweety", 1)]for animal in animals:print(f"{animal.name} says: {animal.make_sound()}")

十、总结

1. 继承的优势
  • 代码复用
  • 可维护性高
  • 逻辑清晰,层次分明
2. 多态的优点
  • 灵活性
  • 可扩展性
  • 改善代码可读性

练习题

  1. 创建一个新的动物类(如兔子),并确保它能正确实现多态。
  2. 定义一个基类 Shape,包含一个方法 area(),再定义几个派生类(如 CircleRectangle),实现该方法。

项目作业

设计一个简单的图形绘制程序,使用继承和多态实现不同图形的绘制。要求设定一个基类 Shape,并根据形状类型(如圆形、矩形、三角形等)实现该方法。

参考资料

  • Python官方文档
  • 《Python编程:从入门到实践》
  • 在线Python教程

通过上述内容,希望您对继承和多态有了更深入的理解。请随时向我提问,或告知我您的下一个学习主题!


怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!


http://www.ppmy.cn/news/1531062.html

相关文章

Docker 安装 Apache(图文教程)

Apache HTTP服务器(简称Apache)是一个开源的、跨平台的Web服务器软件,由Apache软件基金会开发和维护。Apache HTTP服务器是世界上最流行的Web服务器软件之一,被广泛用于互联网上的网站和应用程序。 一、拉取镜像 docker pull httpd:latest二、运行容器 Apache的默认端口是…

希捷电脑硬盘好恢复数据吗?探讨可能性、方法以及注意事项

在数字化时代&#xff0c;数据已成为我们生活和工作中不可或缺的一部分。希捷电脑硬盘作为数据存储的重要设备&#xff0c;承载着大量的个人文件、工作资料以及珍贵回忆。然而&#xff0c;面对硬盘故障或误操作导致的数据丢失&#xff0c;许多用户不禁要问&#xff1a;希捷电脑…

丹摩智算平台部署 Llama 3.1:实践与体验

文章目录 前言部署前的准备创建实例 部署与配置 Llama 3.1使用心得总结 前言 在最近的开发工作中&#xff0c;我有机会体验了丹摩智算平台&#xff0c;部署并使用了 Llama 3.1 模型。在人工智能和大模型领域&#xff0c;Meta 推出的 Llama 3.1 已经成为了目前最受瞩目的开源模…

MMD模型一键完美导入UE5-VRM4U插件方案(一)

1、下载pmx模型 1、去模之屋官网下载MMD模型,模之屋 2、下载完成得到pmx和Texture文件 2、下载并启用VRM4U插件 1、下载VRM4U插件, VRM4U,点击Latest下载对应引擎版本 2、将插件放到Plugins目录,然后

案例研究丨国控星鲨利用DataEase释放数据潜能,重塑业务视野

国药控股星鲨制药&#xff08;厦门&#xff09;有限公司&#xff08;以下简称为国控星鲨&#xff09;始创于1952年&#xff0c;前身为厦门鱼肝油厂&#xff0c;距今已经有70余年历史&#xff0c;是国家商务部认定的“中华老字号”企业。2011年&#xff0c;国药控股与厦门轻工集…

windows C++-计划程序策略

本文介绍并发运行时中计划程序策略的角色。 计划程序策略能控制计划程序在管理任务时使用的策略。 例如&#xff0c;假设一个应用程序需要某些任务在 THREAD_PRIORITY_NORMAL 上执行&#xff0c;而其他任务在 THREAD_PRIORITY_HIGHEST 上执行。 您可以创建两个计划程序实例&…

C--结构体和位段的使用方法

各位看官如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论&#xff0c;感谢您的支持&#xff01;&#xff01;&#xff01; 一&#xff1a;结构体 首先结构体我们有一个非常重要的规则 非常重要&#xff1a; 我们允许在初始化时自动将字符串字面…

生动好看的css卡片样式

样式一&#xff1a; 借鉴网址&#xff1a;https://www.vue3js.cn/ 展示&#xff1a; css <div classaa></div>.aa {width: 300px;height: 200px;background: #fbfbfb !important;border: 1px solid #f1f1f1;transition: all 0.2s ease-in-out; } .aa:hover {wi…