设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)
概念使用例子的方式介绍(继承,多态,虚方法,方法重写),实现代码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)
概念:子类覆盖父类的同名方法,实现自己的逻辑。
好处:
- 例如父类中有很多公共的方法,子类继承后,可能有部分功能是自己独有的,这时就需要重写这个方法,已到达独有的功能实现,例如父类动物,子类猫,鸟。父类中有公共的运动方法run,但是猫和鸟的运动方式不一样,所以这里进行重写,满足各自的要求。
- 强一致性:通过继承父类的一个方法,这时不能自己定义一个方法名,必须使用父类公共的,这避免了不同方法名的出现。
- 复用代码。
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)天然支持多态,无需显式类型声明。
相关文章:
设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)
概念使用例子的方式介绍(继承,多态,虚方法,方法重写),实现代码python 1. 继承(Inheritance) 概念:子类继承父类的属性和方法,可以直接复用父类的代码&#…...
2025年小程序DDoS与CC攻击防御全指南:构建智能安全生态
2025年,小程序已成为企业数字化转型的核心载体,但随之而来的DDoS与CC攻击也愈发复杂化、智能化。攻击者利用AI伪造用户行为、劫持物联网设备发起T级流量冲击,甚至通过漏洞窃取敏感数据。如何在高并发业务场景下保障小程序的稳定与安全&#x…...

当当狸智能天文望远镜 TW2 | 用科技触摸星辰,让探索触手可及
当科技邂逅星空,每个普通人都能成为宇宙的追光者 伽利略用望远镜揭开宇宙面纱的 400 年后,当当狸以颠覆传统的设计,让天文观测从专业领域走入千家万户。当当狸智能天文望远镜 TW2,重新定义「观星自由」—— 无需专业知识ÿ…...
QT实现曲线图缩放、拖拽以及框选放大
.h文件 protected: void saveAxisRange();void wheelEvent(QWheelEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QPoint m_…...
C# | 基于C#实现的BDS NMEA-0183数据解析上位机
以下是一个基于C#实现的BDS NMEA-0183数据解析上位机的示例代码,包含基础功能和界面: using System; using System.Collections.Generic; using System.IO.Ports; using System.Windows.Forms; using System.Drawing; using System.Globalization;namespace BDS_NMEA_Viewer…...

科学发现 | 源于生活的启示与突破计划的创新
注:本文为“科学发现”相关文章合辑。 略作重排,未全整理。 哪些重大科学发现,来自生活的启示 ︱ 科学史 2020/10/29 导读 好奇心是最好的向导和老师。 撰文 | 陈敬全(东华大学人文学院教授) 英国进化论者赫胥黎…...

【ArcGIS微课1000例】0145:如何按照自定义形状裁剪数据框?
文章目录 一、添加数据二、绘制形状三、裁剪格网和经纬网一、添加数据 打开软件,添加配套实验数据包中0145.rar中的影像数据,如下图所示: 二、绘制形状 1. 在数据视图中,使用绘图 工具条上的新建圆工具 可创建一个椭圆,使其包含要在该数据框中显示的数据范围。 修改椭圆…...

网络安全防火墙技术有哪些?网络防火墙的主要作用
网络安全防火墙技术有哪些?网络防火墙的主要作用 网络安全防火墙技术是保护网络免受未经授权访问和攻击的关键工具。以下是常见的防火墙技术及其主要作用: 一、网络安全防火墙技术分类 包过滤防火墙(Packet Filtering Firewall) 原理&#x…...

数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall
数据集-目标检测系列- 印度人脸 检测数据集 indian face >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s…...

Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.
版本: 原因 在 Dart Sass 3.0.0 中, @import 规则将被弃用,推荐使用 @use 和 @forward 规则来替代。 1.@use替代@import @use 规则允许你引入其他 Sass 文件中的变量、混合器和函数,并且可以避免命名冲突。 示例: style.scss @use variables;body {color: variables.$pr…...
通过CIDR推出子网掩码和广播地址等
写在前面 不知道你遇到过这种面试题没,给你CIDR,让你推理子网掩码等信息。如果你不会,那本文刚好适合你。 1:一个面试题16.158.165.91/22 这个 CIDR。求一下这个网络的第一个地址、子网掩码和广播地址。 一般如果你对CIDR知识有…...

【工具教程】批量提取PDF指定内容并重命名,PDF文档根据指定识别文字改名,基于java的实现方案
物流单据处理:每天处理大量发货单PDF,提取订单编号、发货方信息等关键字段重命名文件 合同管理:从合同PDF中提取合同编号、签署方名称等作为文件名 学术论文整理:根据论文标题或作者信息重命名PDF文件 财务票据…...
std::iota(C++)
std::iota 1. 概述2. 函数原型3. 使用示例示例 1:填充 vector<int>示例 2:从非零起始值开始 4. 应用场景5. 注意事项6. 与其它算法比较小结 1. 概述 std::iota 定义在头文件 中,C11 起引入。 它用于向前迭代器区间依次填入连续递增的数…...
【IP101】图像特征提取技术:从传统方法到深度学习的完整指南
🌟 特征提取魔法指南 🎨 在图像处理的世界里,特征提取就像是寻找图像的"指纹",让我们能够识别和理解图像的独特性。让我们一起来探索这些神奇的特征提取术吧! 📚 目录 基础概念 - 特征的"体…...

苍穹外卖(用户下单、订单支付)
用户下单、订单支付 导入地址簿功能代码 接口设计 数据库设计(address_book表) 代码导入 功能测试 用户下单 接口设计 数据库设计 订单表 orders 订单明细表 order_detail 代码开发 根据用户下单接口的参数设计DTO 根据用户下单接口的…...
数据结构-非线性结构-二叉树
概述 /** * 术语 * 根节点(root node):位于二叉树顶层的节点,没有父节点。 * 叶节点(leaf node):没有子节点的节点,其两个指针均指向 None 。 * 边(edge)&…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.2 缺失值检测与处理(NULL值填充/删除策略)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 缺失值检测与处理全攻略:NULL值填充与删除策略实战3.2 缺失值检测与处理3.2.1 缺失值类型与业务影响3.2.1.1 缺失值的三种形态3.2.1.2 业务影响分级 3.2.2 缺失值…...

2025年渗透测试面试题总结-某步在线面试(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 一、操作系统相关问题总结与分析及扩展回答 1. Linux命令熟悉度 2. 查看进程的命令 3. 查看网络进程…...

Java后端程序员学习前端之JavaScript
1.什么是JavaScript 1.1.概述 JavaScript是一门世界上最流行的脚本语言javaScript 一个合格的后端人员,必须要精通JavaScript 1.2.历史 JavaScript的起源故事-CSDN博客 2.快速入门 2.1.引入JavaScript 1.内部标签 <script>//.......</script> --…...
ARM Linux 设备树
Linux 设备驱动开发详解:基于最新的Linux 4.0内核, 机械工业出版社, 宋宝华, 2015 1. 设备树的起源 • 背景: ARM架构中大量板级代码冗余,硬编码在mach-xxx目录,设备树(Device Tree)引入结构化描述硬件。 • 目的: 减…...

uniapp-商城-43-shop 后台管理 页面
后台管理较为简单,主要用于后台数据的管理,包含商品类别和商品信息,其实还可以扩展到管理用户等等 1、后台首页 包含 分类管理 商品管理 关于商家等几个栏目 主要代码: <template><view class"manage">…...
kotlin JvmName注解的作用和用途
1. JvmName 注解的作用 JvmName 是 Kotlin 提供的一个注解,用于在编译为 Java 字节码时自定义生成的类名或方法名。 作用对象: 文件级别(整个 .kt 文件)函数、属性、类等成员 主要用途: 控制 Kotlin 编译后生成的 JV…...
Mac 平台 字体Unicode范围分析器
字体Unicode范围分析器 #include <CoreText/CoreText.h> // CoreText框架头文件,用于字体处理 #include <CoreFoundation/CoreFoundation.h> // CoreFoundation框架头文件 #include <stdio.h> // 标准输入输出 #include…...
【C++游戏引擎开发】第30篇:物理引擎(Bullet)—软体动力学系统
一、软体动力学理论体系 1.1 连续体力学基础 1.1.1 变形梯度张量 物体运动可描述为映射函数: x = ϕ ( X , t ) \mathbf{x} = \phi(\mathbf{X},t) x...

vue2 结合后端预览pdf 跨域的话就得需要后端来返回 然后前端呈现
<el-button :loading"pdfIslock" v-if"isPDFFile(form.pic)" type"primary" style"margin: 15px 0" click"previewPDF(form.pic)"> 预览pdf </el-button>//npm install pdfjs-dist //如果没有就得先安装import …...

什么是 HSQLDB?
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! Java开发人员学习Java数据库连接(JDBC)的最简单方法是试验HyperSQL数据库(又名HSQLDB)。 …...
AI时代企业应用系统架构的新思路与CIO变革指南
作为制造企业CIO,我们看问题需要有前瞻性,AI时代企业应用系统架构需要进行全面转型。 一、新思想与新技术 1. 核心新思想 可视化开发AI的融合模式:不再只依赖纯代码开发或传统低代码,而是两者结合,通过AI理解自然语…...

多语言爬虫实现网站价格监控
最近突发奇想想用多种代码来爬取数据做价格监控。常见的比如Python、JavaScript(Node.js)、或者Go?不过通常来说,Python应该是首选,因为它的库比较丰富,比如requests和BeautifulSoup,或者Scrapy。不过客户要求多种代码…...
如何修改 JAR 包中的源码
如何修改 JAR 包中的源码 前言一、准备工作二、将 JAR 当作 ZIP 打开并提取三、重写 Java 类方法 A:直接替换已编译的 .class方法 B:运行时类路径优先加载 四、修改 MyBatis(或其他)XML 资源五、重新打包 JAR(命令行&a…...

16.Three.js 中的 RectAreaLight 全面详解 + Vue 3 实战案例
😎 本文将带你从零了解 THREE.RectAreaLight 的工作原理、使用方式、注意事项,并在最后用 Vue 3 的 Composition API 封装一个完整的光源演示组件,一站式搞懂矩形区域光的魅力 💡! 🖼️ 一、展示图效果示意…...