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

设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)

概念使用例子的方式介绍(继承,多态,虚方法,方法重写),实现代码python

1. 继承(Inheritance)

概念:子类继承父类的属性和方法,可以直接复用父类的代码,避免重复。

class Animal:def __init__(self, name):self.name = namedef eat(self):print(f"{self.name}正在吃东西")class Dog(Animal):  # Dog 继承自 Animalpassdog = Dog("旺财")
dog.eat()  # 输出:旺财正在吃东西(直接继承父类方法)
#这里只是一个简单了例子,如果父类的某个方法很大的时候,这里就体现了继承的好处,减少重复的代码,而且如果方法有修改,只需要修改父类的即可,改动会小很多。

2. 方法重写(Method Overriding)

概念:子类覆盖父类的同名方法,实现自己的逻辑。
好处

  1. 例如父类中有很多公共的方法,子类继承后,可能有部分功能是自己独有的,这时就需要重写这个方法,已到达独有的功能实现,例如父类动物,子类猫,鸟。父类中有公共的运动方法run,但是猫和鸟的运动方式不一样,所以这里进行重写,满足各自的要求。
  2. 强一致性:通过继承父类的一个方法,这时不能自己定义一个方法名,必须使用父类公共的,这避免了不同方法名的出现。
  3. 复用代码。
class Cat(Animal):def eat(self):  # 重写父类的 eat 方法print(f"{self.name}优雅地吃鱼")cat = Cat("小白")
cat.eat()  # 输出:小白优雅地吃鱼(调用子类重写后的方法)

3. 虚方法(Virtual Method)

概念:父类中定义方法但不实现具体逻辑,强制子类重写。Python 中没有显式虚方法,但可通过抛出异常模拟。

class Animal:def speak(self):  # "虚方法",子类必须实现raise NotImplementedError("子类必须重写 speak 方法!")class Dog(Animal):def speak(self):  # 必须重写父类虚方法return "汪汪!"dog = Dog("旺财")
print(dog.speak())  # 输出:汪汪!

4. 多态(Polymorphism)

概念:不同子类对象调用相同方法,产生不同结果。Python 是动态类型语言,天然支持多态。

# 定义一个父类 Animal
class Animal:def __init__(self, name):self.name = name# 定义一个虚方法 speakdef speak(self):return f"{self.name} makes a sound."# 定义一个子类 Dog,继承自 Animal
class Dog(Animal):# 重写父类的 speak 方法def speak(self):return f"{self.name} barks."# 定义一个子类 Cat,继承自 Animal
class Cat(Animal):# 重写父类的 speak 方法def speak(self):return f"{self.name} meows."# 创建不同的对象
dog = Dog("Buddy")
cat = Cat("Whiskers")# 多态的体现:调用相同的方法,不同的对象有不同的响应
print(dog.speak())
print(cat.speak())

关键概念总结

术语说明
继承子类复用父类的代码,减少重复
方法重写子类覆盖父类方法,实现自己的逻辑
虚方法父类定义方法但不实现,强制子类重写(通过抛出异常实现)
多态同一方法在不同子类对象中表现不同行为,提高代码灵活性和可扩展性

Python 通过动态类型和鸭子类型(Duck Typing)天然支持多态,无需显式类型声明。

http://www.xdnf.cn/news/4178.html

相关文章:

  • 深入理解块级格式化上下文(BFC)
  • 文本三剑客
  • 字符串匹配 之 拓展 KMP算法(Z算法)
  • 数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall
  • 深度解析:从 GPT-4o“谄媚”到 Deepseek“物理腔”,透视大模型行为模式的底层逻辑与挑战
  • Unity:AddTorque()(增加旋转力矩)
  • uniapp 云开发全集 云数据库
  • JavaScript 笔记 --- part7 --- JS进阶 (part2)
  • 【信息系统项目管理师-论文真题】2008上半年论文详解(包括解题思路和写作要点)
  • Python生活手册-NumPy数组创建:从快递分拣到智能家居的数据容器
  • 互联网大厂Java求职面试:AI大模型与云原生架构设计深度解析
  • 【学习心得】Xtuner模型qlora微调时错误记录
  • 【嘉立创EDA】FPCB(Flexible-PCB)柔性软板设计如何增加补强层
  • 反常积分(广义积分)
  • Redis总结(六)redis持久化
  • C++ 适配器模式详解
  • Java中使用Lock简化同步机制
  • 安装SDL和FFmpeg
  • 强化学习ppo算法在大语言模型上跑通
  • [ 设计模式 ] | 单例模式
  • Android学习总结之GetX库篇(场景运用)
  • 智能合约在去中心化金融(DeFi)中的核心地位与挑战
  • 机器学习中常见搜索算法
  • 代码随想录算法训练营第三十二天
  • Scrapy爬虫实战:如何用Rules实现高效数据采集
  • STM32教程:DMA运用及代码(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
  • Vue3响应式原理那些事
  • PyTorch 张量与自动微分操作
  • 研0大模型学习(第12天)
  • 《深入理解 Java 虚拟机》笔记