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

Python——继承

一、继承

1. 什么是继承?

继承是一种面向对象编程的机制,允许一个类(子类)从另一个类(父类)继承属性和方法。子类可以扩展或修改父类的功能。

2. 如何实现继承?

在Python中,实现继承非常简单,只需要在定义子类时将父类作为参数传递即可。

示例
class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclass must implement abstract method")class Dog(Animal):def speak(self):return f"{self.name} says Woof!"class Cat(Animal):def speak(self):return f"{self.name} says Meow!"dog = Dog("Buddy")
cat = Cat("Kitty")print(dog.speak())  # 输出: Buddy says Woof!
print(cat.speak())  # 输出: Kitty says Meow!

在这个例子中,DogCat类继承了Animal类,并实现了自己的speak方法。

二、调用父类方法

1. 为什么要调用父类方法?

在子类中,有时我们需要调用父类的方法来重用父类的功能。可以通过使用super()函数来实现。

2. 如何调用父类方法?

使用super()函数可以调用父类的方法。

示例
class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclass must implement abstract method")class Dog(Animal):def __init__(self, name, breed):super().__init__(name)self.breed = breeddef speak(self):return f"{self.name} the {self.breed} says Woof!"dog = Dog("Buddy", "Golden Retriever")
print(dog.speak())  # 输出: Buddy the Golden Retriever says Woof!

在这个例子中,Dog类调用了Animal类的__init__方法来初始化name属性。

三、多继承

1. 什么是多继承?

多继承是指一个类可以继承多个父类,从而获得多个父类的属性和方法。这在某些复杂场景下非常有用,但也可能带来混乱和复杂性。

2. 如何实现多继承?

在Python中,定义类时可以将多个父类作为参数传递,实现多继承。

示例
class Animal:def speak(self):raise NotImplementedError("Subclass must implement abstract method")class Canine:def run(self):return "Running fast!"class Dog(Animal, Canine):def speak(self):return "Woof!"dog = Dog()
print(dog.speak())  # 输出: Woof!
print(dog.run())    # 输出: Running fast!

在这个例子中,Dog类同时继承了AnimalCanine类,从而获得了speakrun方法。

交叉多继承示例
class Animal:def __init__(self, name):self.name = namedef move(self):return "Moving"class Swimmer:def swim(self):return "Swimming"class Flyer:def fly(self):return "Flying"class Duck(Animal, Swimmer, Flyer):def quack(self):return "Quack"duck = Duck("Donald")
print(duck.move())   # 输出: Moving
print(duck.swim())   # 输出: Swimming
print(duck.fly())    # 输出: Flying
print(duck.quack())  # 输出: Quack

在这个例子中,Duck类同时继承了AnimalSwimmerFlyer类,获得了所有这些类的功能。

四、Mixin类

1. 什么是Mixin类?

Mixin类是一种设计模式,用于提供特定功能,但不单独实例化。Mixin类通常是用来扩展其他类的功能,避免多继承带来的复杂性。

2. 如何使用Mixin类?

在Python中,可以通过创建独立的Mixin类,并在需要的类中继承这些Mixin类来实现。

示例
class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclass must implement abstract method")class WalkMixin:def walk(self):return f"{self.name} is walking"class Dog(Animal, WalkMixin):def speak(self):return f"{self.name} says Woof!"dog = Dog("Buddy")
print(dog.speak())  # 输出: Buddy says Woof!
print(dog.walk())   # 输出: Buddy is walking

在这个例子中,WalkMixin类提供了walk方法,Dog类通过继承WalkMixin获得了这个方法的功能。

复杂Mixin示例
class Animal:def __init__(self, name):self.name = namedef move(self):return "Moving"class WalkMixin:def walk(self):return f"{self.name} is walking"class SwimMixin:def swim(self):return f"{self.name} is swimming"class FlyMixin:def fly(self):return f"{self.name} is flying"class Duck(Animal, WalkMixin, SwimMixin, FlyMixin):def quack(self):return f"{self.name} says Quack"duck = Duck("Donald")
print(duck.move())   # 输出: Moving
print(duck.walk())   # 输出: Donald is walking
print(duck.swim())   # 输出: Donald is swimming
print(duck.fly())    # 输出: Donald is flying
print(duck.quack())  # 输出: Donald says Quack

在这个例子中,Duck类通过继承多个Mixin类,获得了行走、游泳和飞行的功能,同时还实现了自己的quack方法。

总结

  • 继承:允许一个类从另一个类继承属性和方法,简化代码。
  • 调用父类方法:通过super()函数调用父类方法,实现代码重用。
  • 多继承:一个类可以继承多个父类,但要注意可能带来的复杂性。
  • Mixin类:通过Mixin类提供特定功能,减少多继承的复杂性。

通过这些机制,我们可以编写出更具扩展性和可维护性的代码。

相关文章:

Python——继承

一、继承 1. 什么是继承? 继承是一种面向对象编程的机制,允许一个类(子类)从另一个类(父类)继承属性和方法。子类可以扩展或修改父类的功能。 2. 如何实现继承? 在Python中,实现…...

程序员转型AI大模型好转吗?成功率高吗?

前言 在程序员圈子中,技术转型近年来一直是热门话题。随着AI技术的迅猛发展,优秀人才短缺,程序员向AI大模型转型似乎成为了一条通往职场先机的路径。但是,这条转型之路是否容易走,成功率又如何呢? 一、程…...

关于 Postman 这些你都知道吗?

Postman是接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各种http请求,将请求的数据发送到服务端,获取对应的结果,从而测试接口是否能够满足业务功能要求,很直…...

ReentrantLock

ReentrantLock ReentrantLock 是一个可重入的互斥锁,它提供了比 synchronized 关键字更灵活的锁机制。它属于 java.util.concurrent.locks 包。 特点: 可重入性:同一个线程可以多次获取锁而不会造成死锁,锁的计数器会递增。公平…...

python | TypeError: list indices must be integers or slices, not tuple

python | TypeError: list indices must be integers or slices, not tuple 在Python编程中,TypeError: list indices must be integers or slices, not tuple 是一个常见的错误。此错误通常发生在尝试使用非整数(如元组)作为列表索引时。本…...

链码简介及MATLAB提取彩色图像链码

一、链码 链码(又称为freeman code)是一种通过带有给定方向的单位长度的线段序列来描述轮廓边界的方法,常被用来在图像处理、计算机图形学、模式识别等领域中表示曲线和区域边界。在二维图像中,链码可以表示为一系列的方向码,每个…...

二叉树,二叉查找树,平衡二叉树

一.绪论: 二.数据结构(二叉树): 1.简介: 1)每一个节点(也叫结点)都是一个独立的对象-->当中不仅要存数据值,还要存父节点地址值,左子节点地址值,右子 节点地址值 2)没有父节点或者子节点的节点就记为null 2.遍历方…...

《零散知识点 · SpringBoot 整合邮件功能》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

编程小白如何成为大神?大学新生的最佳入门攻略

目录 方向一:选择适合的编程语言 方向二:制定有效的学习计划 方向三:避免常见的学习陷阱 方向四:额外建议 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择…...

使用 PyInstaller 和 Hook 文件打包 APK 解析工具

错误信息如下&#xff1a; Traceback (most recent call last):File "test.py", line 4, in <module>File "<frozen importlib._bootstrap>", line 991, in _find_and_loadFile "<frozen importlib._bootstrap>", line 975, …...

【分布式】分库分表知识点大全

为什么要分库分表 随着业务量的增加导致数据库中数据量的增加&#xff0c;可能拖慢查询的性能&#xff0c;影响业务的可用性&#xff1b;如果数据库采用读写分离&#xff0c;可能会导致从库的延迟较大&#xff0c;主库进行写操作后&#xff0c;从库因为延迟无法及时同步&#…...

FreeRTOS中的定时器:xTimerCreate ,xTimerStart ,xTimerStop

1. 创建定时器 定时器的创建使用 xTimerCreate 函数。该函数有以下参数&#xff1a; pcTimerName&#xff1a;定时器的名字&#xff0c;主要用于调试。xTimerPeriodInTicks&#xff1a;定时器的周期&#xff0c;以系统节拍计时。uxAutoReload&#xff1a;定时器是否自动重载。如…...

【网络安全】文件上传黑白名单及数组绕过技巧

不安全的文件上传&#xff08;Unsafe FileUpload&#xff09; 不安全的文件上传是指Web应用程序在处理用户上传的文件时&#xff0c;没有采取足够的安全措施&#xff0c;导致攻击者可能利用这些漏洞上传恶意文件&#xff0c;进而对服务器或用户造成危害。 目录 一、文件上传…...

4.2、存储管理-页式存储

页式存储和段氏存储会考 页式存储几乎必考&#xff0c;段氏存储可能会考 页式存储 页式存储是操作系统的一种存储管理方式。 因为我们的程序往往是远远大于内存的&#xff0c;所以程序在执行的时候&#xff0c;是不会一次性把所有内容都装入到内存中&#xff0c;它会把程序分…...

60个常见的 Linux 指令

常见60个Linux指令 1.ssh 登录到计算机主机2.ls 列出目录内容3.pwd 当前终端会话所在的完整路径4.cd 切换当前工作目录5.touch 创建空文件或更新文件的时间戳6.echo 终端输出文本或变量值7.nano 在终端中编辑文件8.vim 文本编辑器9.cat 查看、连接和创建文件10.shred 安全删除敏…...

DockerRedis基础

目录 Docker 部署MySQL 镜像和容器 解析命令 Docker基础 常见命令 命令别名 数据卷 命令 自定义镜像 Dockerfile 网络 自定义网络设置静态IP Redis概述 NoSQL&#xff08;非关系型数据库&#xff09; Redis Redis命令行客户端 Redis数据结构 Redis通用命令&…...

oracle读写时相关字符集详解

服务器端操作系统&#xff08;Oracle linux&#xff09;字符集 服务器端数据库字符集 客户端操作系统&#xff08;Oracle linux&#xff09;字符集 客户端工具sqlplus字符集 结论1&#xff1a;客户端工具sqlplus的会话&#xff0c;使用的字符集&#xff0c;是数据库字符集。…...

OverlayFS 文件系统介绍

引言 OverlayFS&#xff08;Overlay Filesystem&#xff09;是 Linux 内核中的一种联合文件系统&#xff08;Union Filesystem&#xff09;&#xff0c;它通过叠加多个目录形成一个单一的文件系统视图。作为 Docker 的默认存储驱动之一&#xff0c;OverlayFS 在提高性能和简化容…...

【C++】用Lua绑定C/C++对象,实现对脚本调用(依赖LuaBridge实现)

【C++】使用LuaBridge为Lua绑定C/C++对象,实现对脚本调用 问题: 如何在C++实现对如下脚本读取,在不改变代码的情况下实现修改脚本打开不同链接? <?xml version="1.0" encoding="utf-8"?> <root><script src="lua:lua_demo&quo…...

Java面试——Tomcat

优质博文&#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个Server可以包含至少一个Service&#xff0c;用于具体提供服务。Service主要包含两个部分&#xff1a;Connector和…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

Java中栈的多种实现类详解

Java中栈的多种实现类详解&#xff1a;Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...