[python] 面向对象的三大特性-封装及新式类
一 继承
- 继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,并可以在其基础上进行扩展或修改。
-
子类可以继承父类的属性和方法,包括私有属性和隐藏属性
💡 核心思想:
- 避免重复代码,提高复用性。
- 实现类之间的层次关系。
1.1 语法和分类
- 分类: 单继承和多继承
class 类名(父类名):
代码块
1.2 应用
-
下面写了一个类并且实现了一个speak方法, 但是这个方法并没有实现具体的逻辑,
-
而是抛出一个异常,要求任何继承自 Animal 的子类都必须重写这个方法以提供具体的行为,
-
当然并不是非要抛出异常,一般来说就当成一个普通类来定义就行。
class Animal:def __init__(self, name):self.name = namedef _ask(self):print("todi")def speak(self):raise NotImplementedError("Subclass must implement abstract method")
- 像这样,继承Animal类并重写这个方法
class Dog(Animal):def speak(self):return f"{self.name}"
class Cat(Animal):def speak(self):return f"{self.name} says Meow!"
- 这样我们在调用dog类时,既可以使用父类中继承来的_ask方法,也可以使用重写的speak方法
- 正如开始所讲的,子类可以继承父类的私有属性和方法_ask是一个私有方法
if __name__ == "__main__": # 表示下面的语法只有在当前文件被直接运行时才会执行dog = Dog("汤姆")cat = Cat("丧彪")print(dog.speak())print(cat.speak())print(cat._ask())
二 多层继承
- 指的是一个类继承自另一个类,而那个类又继承自另一个类,形成一种层次结构。例如 A 继承自 B,B 继承自 C。
- 比如定义了一个动物类,然后在定义一个飞行类继承动物类,然后再定义一个狗类继承飞行类,
- 这就相当于狗类继承了父类的飞行属性,也从飞行属性的父类中继承了动物属性。
class Animal:def __init__(self, name):self._name = namedef speak(self):print(f"{self._name} makes a sound(制造噪音).")class Fly(Animal):def fly(self):print(f"{self._name} fly.(飞行)")class Dog(Fly):def speak(self):print(f"{self._name} 狗叫")
- 这时候我们创建Dog类,他是继承自->Fly(飞行类)也就永远fly的能力
- 而Fly类继承Animal动物类,他就具有speak的能力
dog1 = Dog("哈士奇")
dog1.speak()
dog1.fly()
-
如果这里Dog类,也就是孙子类没有重写这个speak方法或者使用pass什么都不做
-
那么他就会执行从层级类上面继承而来的方法
三 方法重写
- 方法重写是继承中很常见的。
-
对父类方法进行扩展: 继承父类的方法,子类也可以增加自己的功能
-
当从父类中继承的方法不能满足子的需求时,可以再子类中重写父类的方法,也叫覆盖
# 方式:
# 1 父类名.方法名()
# 2 super().方法名() --推荐使用
# 3 super(子类名,self).方法名
# 4 也可以完全覆盖重写
- 首先我们定义一个动物类,再定义一个飞行的子类继承动物类
- 再子类中重新写父类的方法,并且调用了super.speak()表示继承父类方法,然后还可以实现自己额外的功能。
- 也可以直接全部重写不调用父类的方法。
class Animal:def __init__(self, name):self._name = namedef speak(self):print(f"{self._name} makes a sound(制造噪音).")class Fly(Animal):def speak(self):super().speak()print(f"{self._name} makes a sound(制造飞行噪音).")
bird = Fly("布谷鸟")
bird.speak()
四 新式类
- 首先了解一个概念,派生类-> 有继承别的类并且修改了功能的类
- 这个概念并不重要
-
派生 = 继承 + 扩展/修改
子类有不同与父类的属性或者方法,如果子类只是继承但没有做任何东西,则不是派生类
经典类:
- 这种方式就是没有继承任何类就是属于经典类
# class A: #经典类: 不由任意内置类型派生出的类
# pass
新式类:
-
python3中如果一个类没有继承任何类,则默认继承object类
-
object类是python为所有对象提供的基类,提供了一些内置的属性和方法
-
类似与QT中的QObject
class A(object):pass
- 我们可以使用dir()内置函数查看某个类的属性和方法
print(dir(object))
五 多继承
- 指的是一个类同时继承自多个父类。例如 D 继承自 A 和 B
- 供了一种强大的机制,允许子类从多个父类继承功能,但需要小心处理方法冲突和构造函数的初始化。
class Animal:def __init__(self, name):self._name = namedef speak(self):print(f"{self._name} makes a sound(制造噪音).")class Fly(Animal):def fly(self):print(f"{self._name} fly.(飞行)")def speak(self):print(f"{self._name} makes a sound(制造飞行噪音).")class Work(Animal):def work(self):print(f"{self._name} work.(散步)")def speak(self):print(f"{self._name} makes a sound(散步聊天).")class Dog(Fly,Work):pass
dog1 = Dog("哈士奇")
dog1.speak()
-
Fly和work类中有speak这个类,但是这种有重复的属性和方法时,会优先继承靠前面类的
-
为什么有这种情况存在
-
方法的搜索顺序会按照mro输出的结果从左往右查找
-
python中内置的属性__mro__可以查看方法调用顺序
print(Dog.__mro__)
- 这时候我们会发现最左边是Dog类,也就是说如果能够在这个类中找到我们所调用的方法,那就不会再去继承的父类上去查找要调用的方法了。
相关文章:
[python] 面向对象的三大特性-封装及新式类
一 继承 继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,并可以在其基础上进行扩展或修改。 子类可以继承父类的属性和方法,包括私有属性和隐藏属性 💡 核心思想: 避免重复代码&…...
winreg查询Windows注册表的一些基本用法
注册表是Windows操作系统中用于存储配置信息的数据库。它包含了关于系统硬件、已安装的应用程序、用户账户设置以及系统设置的信息。 特别地,当我们需要某些软件的配置配息时,主要在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下的SoftWare内进行查询操作。 …...
DHCP自动分配IP
DHCP自动分配IP 练习1 路由器 Router>en Router#conf t Router(config)#ip dhcp pool ip10 //创建DHCP地址池 Router(dhcp-config)#network 192.168.20.0 255.255.255.0 // 配置网络地址和子网掩码 Router(dhcp-config)#default-router 192.168.20.254 //配置默认网关 Rou…...
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…...
TDengine 在金融领域的应用
简介 金融行业正处于数据处理能力革新的关键时期。随着市场数据量的爆炸式增长和复杂性的日益加深,金融机构面临着寻找能够高效处理大规模、高频次以及多样化时序数据的大数据处理系统的迫切需求。这一选择将成为金融机构提高数据处理效率、优化交易响应时间、提高…...
十三、动态对象创建(Dynamic Object Creation)
十三、动态对象创建(Dynamic Object Creation) 目录 13.1 对象创建(Object creation)13.2 new / delete 操作符13.3 数组的 new 与 delete13.4 总结 背景说明 有时候我们需要知道程序中对象的数量、类型和声明周期,…...
cursor Too many报错 显示锁机器码怎么办?也就是Cursor的
22. Too many报错 显示锁机器码怎么办?也就是Cursor的 文档出自:https://www.kdocs.cn/l/cp5GpLHAWc0p...
window 显示驱动开发-将虚拟地址映射到内存段(二)
在将虚拟地址映射到段的一部分之前,视频内存管理器调用显示微型端口驱动程序的 DxgkDdiAcquireSwizzlingRange 函数,以便驱动程序可以设置用于访问可能重排的分配位的光圈。 驱动程序既不能将偏移量更改为访问分配的 PCI 光圈,也不能更改分配…...
Linux 软硬连接详解
目录 一、软链接(Symbolic Link) 定义与特性 实现方法使用 ln -s 命令: 二、硬链接(Hard Link) 1、是什么 2、工作机制 3、实现方式 一、软链接(Symbolic Link) 定义与特性 定义…...
虚拟主机与独立服务器:哪个更好?
在选择网站主机提供商时,你可以选择独立服务器或者与其他用户共同使用的虚拟主机。这个决定不仅仅是基于价格,还有很多其他因素需要考虑。接下来,我们就来详细了解一下虚拟主机和独立服务器的区别。 虚拟主机和独立服务器的区别 独立服务器是…...
MiMo-7B-RL调研
结论 MiMo 在数学推理和代码竞赛的评测中表现出色,但是相较于 OpenAI 的 o1-mini 和阿里的 QwQ-32B-Preview 等更大规模的模型,推理耗时更长(4 到 10 倍),花费 Token 更多。 链接 开源地址: https://huggingface.co/…...
vue-i18n 优化
语言包管理优化: 当前语言包文件(en.json 和 zh.json)过大,建议按模块拆分建议的目录结构: src/assets/i18n/ ├── modules/ │ ├── common/ │ ├── dashboard/ │ ├── report/ │ └── system/ …...
全栈工程师实战手册:LuatOS日志系统开发指南!
本文聚焦LuatOS-log库的实战应用场景,通过完整案例演示日志模块集成、格式定制及远程同步方案,帮助全栈开发者构建灵活可靠的日志管理框架。下面,我们一起来认识LuatOS的log库! 一、 log.info() log info()主要打印一些正常的…...
Java知识库网站整理
本文主要推荐一些高质量的Java知识库和学习网站,涵盖了从基础到高级的Java技术,包括JVM底层原理、框架源码分析、面试题集、全栈知识体系等。如果你有其他优秀的Java学习网站推荐,欢迎在评论区分享! 如遇到以下网站不能打开请检查…...
详解 IRC协议 及客户端工具 WeeChat 的使用
本文将详细介绍 Internet Relay Chat(IRC)协议及其历史、基本概念、核心功能,以及流行的 IRC 客户端 WeeChat 的安装、配置和使用方法。内容力求准确、详尽,涵盖 IRC 的技术背景、使用场景,以及 WeeChat 的高级功能和实…...
数据出境的安全合规思考
数据已成为新型国家战略性资产,其经济和战略价值在全球数字经济发展中愈加凸显。跨境数据流动既是重要的经济纽带,又是新兴的经济秩序博弈焦点,对于推动经济全球化发展意义重大。然而,跨境数据流动也面临诸多问题与挑战࿰…...
【技巧】使用frpc点对点安全地内网穿透访问ollama服务
回到目录 【技巧】使用frpc点对点安全地内网穿透访问ollama服务 0. 为什么需要部署内网穿透点对点服务 在家里想访问单位强劲机器,但是单位机器只能单向访问互联网,互联网无法直接访问到这台机器。通过在云服务器、单位内网服务器、源端访问机器上&am…...
Go语言即时通讯系统 开发日志day1
Go语言即时通讯系统开发日志day1,主要模拟实现的一个简单的发送消息和接受消息的小demo,因为也才刚学习go语言的语法,对go的json、net/http库了解不多,所以了解了一下go语言的encoding/json库和net/http库,以及websock…...
多线程访问Servlet如何谨慎处理共享资源
1. 避免共享状态(最佳实践) 核心思想:Servlet 本身应设计为无状态(Stateless),不依赖实例变量存储请求相关数据。 实现方式: 将变量声明在方法内部(局部变量)࿰…...
OpenMCU(六):STM32F103开发板功能介绍
概述 距上一篇关于STM32F103的FreeRTOS博客的发布已经过去很长时间没有更新了。在这段时间内,大家可以看到博主发表了一系列的关于使用qemu 模拟实现STM32F103的博客,博主本来想借助qemu开发stm32F103相关的一些软件功能,博主开发出来并成功运…...
运用数组和矩阵对数据进行存取和运算——NumPy模块 之五
目录 NumPy模块介绍 3.5.1 NumPy 操纵数组元素的逻辑 3.5.2 添加数组元素操作 1. append() 函数 2. insert() 函数 3.5.3 删除数组元素的操作 delete() 函数 3.5.4 数组元素缺失情况的处理 isnan() 函数 3.5.5 处理数组中元素重复情况 unique() 函数 3.5.6 拼接数组操作 1. con…...
AI Agent开发第64课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent
开篇 我们之前花了将近10个篇章讲Dify的一些基础应用,包括在讲Dify之前我们讲到了几十个AI Agent的开发例子,我不知道大家发觉了没有,在AI Agent开发过程中我们经常会伴随着这样的一些问题: 需要经常改猫娘;需要经常改调用LLM的参数,甚至在一个流程中有3个节点,每个节点…...
日志 Slf4j , Java 中使用
// 示例代码package biz.baijing.controller;import biz.baijing.pojo.Result; import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…...
Matlab 单机无穷大系统故障
1、内容简介 Matlab 236-单机无穷大系统故障 可以交流、咨询、答疑 2、内容说明 略 摘要:短路是电力系统中最容易发生的故障,每年因短路而引发的电气事故不计其数。本文详细介绍了短路故障产生的原因以及危害等,并重点介绍了Simulink仿真工…...
Hadoop区别
Hadoop • 定义 • Hadoop是一个由Apache基金会开发的分布式计算平台。它主要包括HDFS(Hadoop Distributed File System)和MapReduce编程模型。HDFS用于存储大规模数据,它将文件分割成多个数据块(block),并…...
【软件工程】软件缺陷 基于组合的优化方法
在软件缺陷检测中,基于组合的优化方法主要通过数学和计算策略高效地探索可能的解空间,以解决测试用例生成、缺陷定位和预测等问题。以下是其关键要点和应用场景的整理: 1. 组合优化在软件缺陷检测中的应用场景 测试用例生成 组合测试…...
python opencv 将不同shape尺寸的图片制作video视频
python opencv 将不同shape尺寸的图片制作video视频。 具体代码实现如下: import os import cv2 import time import shutil def resize_img_keep_ratio(img, target_size):old_size img.shape[:2] # 原始图像大小ratio min(target_size[i] / old_size[i] for …...
Open CASCADE学习|由大量Edge构建闭合Wire:有序与无序处理的完整解析
在CAD建模中,构建闭合的Wire(线框)是拓扑结构生成的基础操作。OpenCascade(OCCT)作为强大的几何建模库,支持从离散的Edge(边)构建Wire,但在实际应用中,边的有序性直接影响构建的成功率。本文将详细探讨有序与无序两种场景下的实现方法,并提供完整代码示例。 一、有序…...
在IDEA中导入gitee项目
一、导入前准备工作 1、下载gitee插件 2、下载好之后就能在VCS中找到share Project on gitee。 二、导入 1、回到idea主页面 2、可以授权登录绑定gitee账号,就可以直接打开仓库。(条件是这个是要打开自己仓库里的代码) 3、也可以复制看见的…...
Edge Remover v18.7 绿色版:轻松卸载 Edge 浏览器,彻底清理残留数据
Edge Remover 是一款专门用于卸载 Microsoft Edge 浏览器及其 WebView2 运行时的工具。它能够彻底删除 Edge 浏览器及其相关组件,包括所有文件、注册表项和其他残留数据。此外,Edge Remover 还可以防止 Windows 更新自动重新安装 Edge 浏览器。 软件功能…...
深入理解 iOS 开发中的 `use_frameworks!`
在使用 CocoaPods 管理 iOS 项目依赖时,开发者经常会在 Podfile 文件中看到一个配置选项:use_frameworks!。本文将详细介绍这个配置选项的含义,以及如何决定是否在项目中使用它。 一、什么是 use_frameworks! 在 CocoaPods 中引入第三方库时…...
Vue学习百日计划-Gemini版
核心理念: 基础先行: HTML, CSS, JavaScript 是前端的基石,必须扎实。聚焦 Vue 3: 学习当前主流的 Vue 3 版本,重点掌握 Composition API。实践驱动: 每个阶段都要有项目练习,理论结合实践。生…...
不定长滑动窗口---初阶篇
目录 引言 求最长/最大 3. 无重复字符的最长子串 3090. 每个字符最多出现两次的最长子字符串 1493. 删掉一个元素以后全为 1 的最长子数组 1208. 尽可能使字符串相等 904. 水果成篮 1695. 删除子数组的最大得分 2958. 最多 K 个重复元素的最长子数组 2024. 考试的最大…...
MacOS 上构建 gem5
MacOS 中只存在 python3,但是scons 只认 python,不在 系统中创建 软连接,一个是因为比较难操作;另一个是尽量不要更改系统。所以独立构件python 和scons: 1,安装python 下载源代码: Python S…...
矩阵置零算法讲解
矩阵置零算法讲解 一、问题描述 给定一个 (m \times n) 的矩阵,如果一个元素为 (0) ,则将其所在行和列的所有元素都设为 (0) 。要求使用原地算法,即在不使用额外矩阵空间的情况下完成操作。 二、解题思路 暴力解法 最直观的想法是遍历矩阵,当遇到 (0) 元素时,直接将其…...
HAProxy + Keepalived + Nginx 高可用负载均衡系统
1. 项目背景 在现代Web应用中,高可用性和负载均衡是两个至关重要的需求。本项目旨在通过HAProxy实现流量分发,通过Keepalived实现高可用性,通过Nginx提供后端服务。该架构能够确保在单点故障的情况下,系统仍然能够正常运行&#…...
火山RTC 6 自定义视频
文档: 自定义视频采集--实时音视频-火山引擎 这个点,相关的文档 关于PC上的资料只有寥寥几句,没有代码、没有DEMO,自己琢磨了几天,没走对方向,和客服你来我往拉锯了几天加投诉下,才给了点内部…...
[Java][Leetcode middle] 121. 买卖股票的最佳时机
暴力循环 总是以最低的价格买入,以最高的价格卖出: 例如第一天买入,去找剩下n-1天的最高价格,计算利润 依次计算到n-1天买入; 比较上述利润 // 运行时间超时。 o(n^2)public int maxProfit1(int[] prices) {int profit 0;for (i…...
《数据结构初阶》【堆 + 堆排序 + TOP-K】
【堆 堆排序 TOP-K】目录 前言:什么是堆?堆的实现方式有哪些?我们要选择哪种方式进行实现? ----------------堆的实现----------------什么是向上调整算法,要怎么实现?什么是向下调整算法,要怎…...
sqlilab-Less-18
知识铺垫 User-Agent 首部包含了一个特征字符串,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。user-agent的作用。通过识别用户身份,响应合适的web界面,所以更改可以让电脑返回一个手机界…...
mapbox进阶,使用mapbox-plugins插件加载饼状图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀使用mapbox-plugins插件加载饼状图1. ☘…...
【Java继承】——面向对象编程的基石
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 【前言】 在Java面向对象编程中,继承是一个非常重要的概念。它允许我们创建一个新类&…...
【数据结构】——队列
一、队列的概念和结构 概念: 只允许在⼀端进⾏插⼊数据操作,在另⼀端进⾏删除数据操作的特殊线性表,队列具有先进先 出FIFO(First In First Out)。 入队:进行数据插入的一端叫做队尾 出队:进行删除操作的一端叫做队…...
如何找出所有不重复的三位偶数:详细解法与思考过程
问题描述 给定一个包含数字(0-9)的数组digits,其中可能包含重复元素。我们需要找出所有满足以下条件且互不相同的整数: 该整数由digits中的三个元素按任意顺序依次连接组成 该整数不含前导零(即必须是100-999之间的数…...
每日Prompt:超现实交互场景
提示词 一幅铅笔素描画,描绘了 一个女孩 与 一朵玫瑰 互动的场景,其中 一朵玫瑰 以逼真的全彩风格呈现,与 一个女孩及背景的手绘素描风格形成超现实的对比。...
基于大模型预测的多发性硬化综合诊疗方案研究报告大纲
目录 一、引言二、文献综述三、大模型预测系统构建四、术前预测与手术方案制定五、术中监测与决策支持六、术后护理与并发症预测七、麻醉方案智能优化八、统计分析与技术验证九、实验验证与证据支持十、健康教育与指导系统十一、结论与展望一、引言 (一)研究背景与意义 多发…...
五、Hive表类型、分区及数据加载
在 Hive 中高效构建、管理和查询数据仓库,核心在于精准运用表类型(内部/外部)与分区策略(静态/动态/多重)。这不仅决定数据的生命周期归属,更是优化海量数据查询性能的关键手段。 一、表的身份权责&#x…...
在选择合适的实验室铁地板和铸铁试验平板,帮分析
铸铁测试底板是一种采用铸铁材料经过加工制成的基准测量工具,主要用于工业检测、机械加工和实验室等高精度要求的场合。其核心功能是为各类测量、检验、装配工作提供稳定的水平基准面,确保测量数据的准确性和一致性。 一、铸铁测试底板的基本特性 1.材质…...
阿里云人工智能大模型通义千问Qwen3开发部署
本文主要描述阿里云人工智能大模型开源社区ModelScope提供的通义千问Qwen3开发部署。 与阿里云一起 轻松实现数智化 让算力成为公共服务:用大规模的通用计算,帮助客户做从前不能做的事情,做从前做不到的规模。让数据成为生产资料:…...
网络基础知识梳理和Muduo库使用
文章目录 网络基础知识梳理和Muduo库使用1.知识储备2.阻塞、非阻塞、同步、异步我的总结 3.Unix/Linux上的五种IO模型0.铺垫1.阻塞IO(blocking)2.非阻塞IO(non-blocking)3.IO复用(IO multiplexing)4.信号驱…...