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工具的可以在这上面找找灵感。...

第二十五章新增H5基础(以及视频~兼容)
1.HTML5中新增布局标签 HTML5新增了页眉,页脚,内容块等文档结构相关标签,可以使文档结构更加清晰明了。 1.新增的结构标签 1、<header>标签 定义文档或者文档中内容块的页眉。通常可以包含整个页面或一个内容区域的标题,…...

[英语单词] production quality
Our goal is to implement a production quality switch platform that supports standard management interfaces and opens the forwarding functions to programmatic extension and control. 说在openswitch的文档里有说这两词,含义是产品质量。是production修…...

windows安装nodeJs,以及常用操作
1. 官网(Node.js — Run JavaScript Everywhere (nodejs.org))下载想要安装的node版本 的安装包完成安装 2.环境变量设置: 系统变量: Path新增:D:\Program Files\nodejs (node安装目录) 3.设置淘宝源: npm config set registr…...

MySql part1 安装和介绍
MySql part1 安装和介绍 数据 介绍 什么是数据库,数据很好理解,一般来说数据通常是我们所认识的 描述事物的符号记录, 可以是数字、 文字、图形、图像、声音、语言等,数据有多种形式,它们都以经过数字化后存入计算机…...

SpringBoot打war包并配置外部Tomcat运行
简介 由于其他原因,我们需要使用SpringBoot打成war包放在外部的Tomcat中运行,本文就以一个案例来说明从SpringBoot打war包到Tomcat配置并运行的全流程经过 环境 SpringBoot 2.6.15 Tomcat 8.5.100 JDK 1.8.0_281 Windows 正文 一、SpringBoot配置打war包 第一步&a…...

2024.5.31每日一题
LeetCode 找出缺失的重复数字 题目链接:2965. 找出缺失和重复的数字 - 力扣(LeetCode) 题目描述 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n2] 范围内。除了 a 出现 两次ÿ…...

Oracle 数据库 varchar2 从 4000 扩展到 32k
Oracle 数据库 varchar2 从 4000 扩展到 32k 0. 引言1. 扩展 varchar2 支持长度2. 测试 0. 引言 今天来个项目需求,有1个字段的存储内容大概1万字。 当然其中1个方法是将这个字段的内容切分成几个字段,还有1个方法就是将 varchar2 默认支持 4000 的能力…...

postgressql——事务提交会通过delayChkpt阻塞checkpoint(9)
事务提交会通过delayChkpt阻塞checkpoint Postgresql事务在事务提交时(执行commit的最后阶段)会通过加锁阻塞checkpoint的执行,尽管时间非常短,分析为什么需要这样做: 首先看提交堆栈 #1 0x0000000000539175 in Co…...

开发者工具-sources(源代码选项)
一、概要说明 源代码面板从视觉效果上分为三个区域:菜单区、内容区、监听区。 菜单区里面有5个子分类: 网页(Page):指页面源,包含了该页面中所有的文件,即使多个域名下的文件也都会展示出来,包括iframe…...

没有 rr 头的 kamailio 路由脚本
分享下笔者最近编写的 kamailio 路由脚本 不用 rr 模块,因为有些 sip 协议栈不支持 rr 头处理 sip 注册直接回 200 OK,这部分目前不是重点更换 contact 头,换成 kamailio 自己目前只支持 sip transport 为 udp,以后可能支持 tcp&…...