Python—面向对象小解(3)
一、多态
多态指的是一类事物的多中形态
相同的方法,产生不同的执行结果
运算符 + * 的多态
int + int 加法计算
str + str 字符串拼接
list + list 列表的数据合并
在python中可以使用类实现一个多态效果
在python中使用重写的方式实现多态
(1)定义两个类:老师、车;
(2)定义老师类的属性:姓名,定义老师类的方法:开车、停车;
(3)定义车类的属性:类型,定义车类的方法:开启、停止;
(4)联系:老师开车,执行程序,观察效果
# 多态
class Teacher:def __init__(self,name):self.name = namedef run(self):print(f'{self.name}老师开车')def stop(self):print(f'{self.name}老师停车')class Car:def __init__(self,type):self.type = typedef start(self):print(f'{self.type}启动')def close(self):print(f'{self.type}熄火')t = Teacher('张三')
c = Car('小汽车')c.start()
t.run()
c.close()
t.stop()#使用继承方式,调整执行的方法
# 多态
class Teacher:def __init__(self,name):self.name = namedef run(self):print(f'{self.name}老师开车')def stop(self):print(f'{self.name}老师停车')class Car(Teacher):def __init__(self,type,name):super().__init__(name)self.type = typedef start(self):print(f'{self.type}启动')super().run()def close(self):print(f'{self.type}熄火')super().stop()c = Car('小汽车','张三')c.start()
c.close()
(5)思考:老师有可能开小轿车、骑自行车、坐地铁等,该怎么改进程序呢?
多态实现的流程:
1-定义一个父类,在父类中定义需要执行的业务方法,具体方法的逻辑不用实现,直接pass,由继承的子类实现
2-定义多个功能的子类继承父类,在子类中对父类方法重写,实现自己子类的逻辑
3-封装一个统一的函数处理方法,让开发人员调用该方法
# 多态
class Teacher:def __init__(self,name):self.name = namedef run(self):passdef stop(self):passclass Car(Teacher):def __init__(self,type,name):super().__init__(name)self.type = typedef run(self):# 在多态实现时,子类继承父类并对父类方法进行重写print(f'{self.type}启动')print(f'{self.name}老师开车')def stop(self):print(f'{self.type}熄火')print(f'{self.name}老师停车')class Metro(Teacher):def __init__(self,type,name):super().__init__(name)self.type = typedef run(self):# 在多态实现时,子类继承父类并对父类方法进行重写print(f'{self.type}启动')print(f'{self.name}老师乘坐地铁')def stop(self):print(f'{self.type}到站')print(f'{self.name}老师下车')# 单独封装一个行为函数
# 该函数就是对外提供一个函数接口,其他开发人员使用,就调用函数
def action(obj):# obj接收一个对象obj.run()obj.stop()c = Car('越野车','张三')
action(c)m = Metro('地铁1号线','李四')
action(m)
二、文件读写
通过文件读写完成对文件数据的处理
使用python中open方法实现对文件的读写
格式
会返回一个文件描述符
使用文件描述符进行数据的读取或写入
f = open(文件位置,读写方式,文件读写格式(utf-8,gbk))data = f.read() 读取
f.write(数据) 写入f.close() 关闭文件
2-1 文件数据读取
# 文件数据读取
# 1-打开文件 创建文件描述符
# open的第一个参数指定读取的文件路径 可以使用绝对路径 也可以使用相对路径 windos的路径需要改斜杠
# 第二参数指定读写方式 r读 w写
# 第三个参数指定文件编码格式,方便读取中文数据 常用的两种utf-8 gbk
f = open('路径','r',encoding='utf-8')# 读取数据文件
# 第一种 读取一行数据
# line_data1 = f.readline()
# print(line_data1)
# line_data2 = f.readline()
# print(line_data2)# 第二种读取多行数据 将读取的多行数据放入列表中 该方式最常用
lines_data = f.readlines()
print(lines_data)# 第三种 一次将所有数据读取出来当成一个完整的字符串数据 前面已经读取过数据 read就无法再读到数据 所以在实际开发中三种方式选择一种
# data = f.read()
# print(data)
# print(type(data))# 数据取完成后可以使用close方法关闭文件
f.close()
2-2 数据写入文件
写入方式
w 覆盖写入数据
a 追加写入数据
写入类型
要求写入数据是字符串类型
# 文件数据写入
# 1-先打开文件获取文件描述符 文件描述符用来操作文件
# 使用相对路径 代码文件运行的所在路径
# csv文件是以逗号分割的数据文件 可以使用excel打开
# w是覆盖写入数据 a是追加写入数据
f = open('./data.csv','a',encoding='utf-8')# 写入数据
f.write('3,王五,20,男')
f.write('\n') # 写入换行符 进行换行
f.write('4,赵六,22,男')
f.write('\n')#关闭文件
f.close()
2-3 二进制文件读写
# 二进制文件数据读写
# 1-打开文件获取文件描述符
f = open('文件路径','rb')# 使用read一次性全部读取
data = f.read()
print(data)
# 关闭文件
f.close()# 打开新的文件,将图片数据保存
f2 = open('./2.jpeg','wb')f2.write(data)f2.close()
2-4 with open 语法 读写文件
# 使用with open自动关闭文件
with open('文件路径','r',encoding='utf-8') as f:data = f.read()print(data)with open('data.json','w',encoding='utf-8') as f:f.write('{"id":1,"name":"张三"}')f.write('\n')f.write('{"id":2,"name":"李四"}')f.write('\n')
文件后缀
txt
csv
json
文件后缀和文件的数据本身没有直接关系
后缀只是为了说明可以使用那种工具打开该文件,方便识别文件类型
三、异常处理
3-1 常见异常
3.1.1 索引错误
-
索引下标异常,一般发生在数据取值
3.1.3 字典Key值错误
3.1.3 类型错误
3.1.4 文件错误
# 索引下标取值错误
data = 'itcast'
data[100]# 字典取值错误
data = {'name':'张三'}
data['age']# 类型错误
data = '100'
data2 = 10
data3 = data/data2# 文件读取错误 路径不存在
with open('aaa.txt','r',encoding='utf-8') as f:f.read()
3-2 异常捕获
通过语法捕获代码中的异常,根据异常信息,解决异常的问题,保证代码能持续运行
格式:
try:
需要捕获遗产干的代码片段,有开发人员自己决定哪些代码需要捕获
except:
捕获到异常后处理的逻辑# 进行异常捕获
try:
# 把出现的错误的代码逻辑放入try的作用域中
data = 15/0
except:
# 捕获到异常处理的业务逻辑
print('异常被捕获')
# 异常被捕获后,可以正常执行后续的逻辑
print('其他代码逻辑')
3-3 指定异常类型捕获
# 可以捕获所有异常
try:data_str = 'itcast'# data_str[100]f = open('aasd.txt','r',encoding='utf-8')
except:# 捕获到异常处理的业务逻辑print('异常被捕获')# 异常被捕获后,可以正常执行后续的逻辑
print('其他代码逻辑')# 捕获固定的异常 处理固定错误
try:# data = 15/0# f = open('aasd.txt', 'r', encoding='utf-8')data_str='itcast'data_str[100]
# 捕获指定异常
except (FileNotFoundError,ZeroDivisionError,IndexError):print('捕获0为除数的异常')
print('其他代码逻辑')
3-4 异常的其他处理
try:data = 15/0# Exception as e 获取异常的错误信息# 可以捕获到异常后输出错误信息
except Exception as e:print('异常被捕获')print(e)
else:print('else 没有异常逻辑')
finally:print('finally :无论是否有异常都执行')
3-5 函数中的异常处理
#在调用函数时进行异常捕获
def func(a,b):data = a + bprint(data)try:# 调用其他开发人员编写的代码处理错误func('10',20)
except Exception as e:print(e)#封装函数时异常捕获
# 函数的异常处理
def func(a, b):data = 0# 在封装的函数内捕获异常try:data = a + bexcept:# 函数内自己处理异常print('异常错误')return data# 调用函数
func(10,'20')#函数内捕获到异常不处理,再传递给掉用函数的地方
# 函数的异常处理
def func(a, b):data = 0# 在封装的函数内捕获异常try:data = a + bexcept:# 将异常的错误信息传递到调用地方 当前没有处理异常raise Exception('函数内计算错误')return data# 调用函数时,捕获函数执行的异常
try:func(10,'20')
except Exception as e:print('异常捕获')print(e)# 多个函数中都要使用的变量可以定义成全局变量,通过global声明,就可在多个函数就可以共享全局数据
name_list = []
password_list = []# 登录注册功能
def login():# 函数作用域# 通过四个空格,来确认函数所执行的逻辑从哪里开始# 列表,元组,集合,字典数据可以省略global声明15/0global name_listglobal password_listfor num in range(3): # [0,3) 0,1,2name = input('请输入用户名:')password = input('请输入密码:')# 先判断用户名是否正确if name in name_list:# 在判断密码是否正确if password in password_list:print('登录成功')# 适应break关键,会结束循环,不再进行取值breakelse:print('密码不正确')else:print('用户名不正确')def register():global name_listglobal password_listname = input('请输入注册的用户名:')password = input('请输入出注册的密码:')# 将用户的名字和密码添加到全局的数据列表name_list.append(name)password_list.append(password)while 1==1:num = input('1-登录 2-注册 3-支付 4-下单 5-退出程序:')if num == '1':# 函数功能的调用try:login() # 函数名()except:print('登录出现错误')elif num == '2':register()elif num == '3':passelif num == '4':passelse:break
相关文章:

Python—面向对象小解(3)
一、多态 多态指的是一类事物的多中形态 相同的方法,产生不同的执行结果 运算符 * 的多态 int int 加法计算 str str 字符串拼接 list list 列表的数据合并 在python中可以使用类实现一个多态效果 在python中使用重写的方式实现多态 (1)定…...
Nginx超时时间
Nginx是一款自由、开源、高性能的HTTP和反向代理服务器,它可以通过不同的设置来提高网站的性能和安全性。其中,设置Nginx超时时间非常重要,因为它将直接影响网站的响应速度和用户体验。本文将从多个方面详细阐述Nginx超时时间的设置方法与注意…...
Imgs,GT,Edge,Gradient_all,Gradient_Foreground
保存一下: 做个记录: import cv2 import os import numpy as np# 对整张图片做canny检测 得到纹理图 def canny_all(input_path, output_path):# 遍历文件夹中的所有文件for filename in os.listdir(input_path):# 构造完整的文件路径image_path os.p…...
自学成才Flutter 弹性布局、线性布局
本文我们要介绍 Flutter 中布局 Widget,包括弹性布局、线性布局 流式布局和层叠布局。 Flutter中文网 Flutter开发 一、弹性布局--Flex Flex 类似 Android 中的 FlexboxLayout,和 Expanded 配合使用可以实现子Widget 按照一定比例来分配父容器空间。 使…...

Part 3.1 深度优先搜索
深度优先搜索(DFS),即按照深度优先的顺序搜索的算法。 深度优先搜索一般使用栈来实现。 [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 6 6 6 \times 6 66 的跳棋棋盘,有六个棋子被放置在棋盘上,使得…...

前端Vue小兔鲜儿电商项目实战Day03
一、Home - 整体结构搭建和分类实现 1. 页面结构 ①按照结构新增5个组件,准备最简单的模板,分别在Home模块的入口组件中引入 src/views/Home/components/ HomeCategory.vue HomeBanner.vue HomeNew.vue HomeHot.vue HomeProduct.vue <script …...
ORACLE 查询SQL优化
1 使用EXPLAIN PLAN 使用EXPLAIN PLAN查看查询的执行计划,这可以帮助你理解查询是如何被Oracle执行的。基于执行计划,你可以确定是否存在索引缺失、不必要的全表扫描等问题。 以下是几种使用EXPLAIN PLAN的方法: 使用EXPLAIN PLAN FOR: 你可以…...

Ansible03-Ansible Playbook剧本详解
目录 写在前面5. Ansible Playbook 剧本5.1 YAML语法5.1.1 语法规定5.1.2 示例5.1.3 YAML数据类型 5.2 Playbook组件5.3 Playbook 案例5.3.1 Playbook语句5.3.2 Playbook1 分发hosts文件5.3.3 Playbook2 分发软件包,安装软件包,启动服务5.3.3.1 任务拆解…...

Qt-qrencode生成二维码
Qt-qrencode开发-生成二维码📀 文章目录 Qt-qrencode开发-生成二维码📀[toc]1、概述📸2、实现效果💽3、编译qrencode🔍4、在QT中引入编译为静态库的QRencode5、在Qt中直接使用QRencode源码6、在Qt中使用QRencode生成二…...
长安链使用Golang编写智能合约教程(三)
本篇主要介绍长安链Go SDK写智能合约的一些常见方法的使用方法或介绍 资料来源: 官方文档官方示例合约库 官方SDK接口文档 教程一:智能合约编写1 教程二:智能合约编写2 一、获取参数、获取状态、获取历史记录的方法解析 注意! …...

Vercel deploy- Nextjs project error-URL link-env variable
Vercel deploy- Nextjs project error-URL link-env variable Error Check Database URL Check next-auth URL NEXTAUTH_URLhttps://yourappname.vercel.app/ 依次排查可能性 Application error: a server-side exception has occurred (see the server logs for more in…...

Java | Leetcode Java题解之第123题买卖股票的最佳时机III
题目: 题解: class Solution {public int maxProfit(int[] prices) {int n prices.length;int buy1 -prices[0], sell1 0;int buy2 -prices[0], sell2 0;for (int i 1; i < n; i) {buy1 Math.max(buy1, -prices[i]);sell1 Math.max(sell1, b…...

Ubuntu22.04之扩展并挂载4T硬盘(二百三十三)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
Redis实现延迟队列
最近用到一个延迟消息的功能,第一时间想到使用MQ或者MQ的插件,因为数据量不大,所以尝试使用Redis来实现了,毕竟Redis也天生支持类似MQ的队列消费,所以,在这里总结了一下Redis实现延迟消息队列的方式。 一、…...

如何准确查找论文数据库?
在学术研究过程中,查找相关论文是获取最新研究成果、支持自己研究的重要途径。准确查找论文数据库不仅可以节省时间,还能确保找到高质量的学术资源。本文将介绍一些有效的方法和策略,帮助您准确查找论文数据库。 1. 选择合适的数据库 不同的…...

翻译《The Old New Thing》- What a drag: Dragging a virtual file (IStream edition)
What a drag: Dragging a virtual file (IStream edition) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080319-00/?p23073 Raymond Chen 2008年03月19日 拖拽虚拟文件(IStream 版本) 上一次,我们看…...

【FPGA】Verilog语言从零到精通
接触fpga一段时间,也能写点跑点吧……试试系统地康康呢~这个需要耐心但是回报巨大的工作。正原子&&小梅哥 15_语法篇:Verilog高级知识点_哔哩哔哩_bilibili 1Verilog基础 Verilog程序框架:模块的结构 类比:c语言的基础…...

unity打包的WebGL部署到IIS问题
部署之后会出错,我遇到的有以下几种; 进度条卡住不动 明明已经部署到了IIS上,为什么浏览网页的时候还是过不去或者直接报错。 进度条卡住不动的问题其实就是wasm和data的错误。 此时在浏览器上按F12进入开发者模式查看错误(下图…...
GPT-4o:人工智能的新里程碑
GPT-4o,作为OpenAI最新推出的人工智能技术,无疑在人工智能领域掀起了新一轮的浪潮。这款新型的语言模型不仅继承了GPT系列的核心优势,更在多个方面实现了突破性的进展。以下,我们将从版本间的对比分析、GPT-4o的技术能力以及个人整…...

发现一个ai工具网站
网址 https://17yongai.com/ 大概看了下,这个网站收集的数据还挺有用的,有很多实用的ai教程。 懂ai工具的可以在这上面找找灵感。...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...