1、面向对象的特征:封装、继承、多态
1.1、封装:
函数一种封装,封装了一些逻辑代码
类也是一种封装,封装属性和方法
属性私有化,对外提供可访问的访问
代码更简洁,方便调用,重复利用,扩展性更好。
1.2、继承:
将公共有内容放在父类中,子类只关注自己特有的属性和方法。
代码更简洁,方便调用,重复利用,扩展性更好。
1.3、多态:
一个对象,赋不同的值,有不同的形态。
在其它语言中,将子类对象赋值给父类对象,这样父类对象会呈现不同的状态。
python本身是一种弱类型语言,没有要求变量的类型。
类型是根据值类型判断的。所有不完全符合多态的要求。
所以说python不支持多态。
2.实现文件的复制粘贴(注重模块化思维,设计模式的融入)
1、输入源文件的路径
2、输入源文件的名字
3、输入目标路径
4、执行复制粘贴
5、要求复制到目标路径里,默认是原来文件的名字,如果此名字已经在当前路径里,把名字改成如下格式(需要加副本或者对应的数字):
![](https://img.haomeiwen.com/i6851740/af5aa690b340fe10.png)
import os
import os.path
def main():
pathSrc = input('请输入源文件的路径:')
fileName = input('请输入源文件的名字:')
pathDest = input('请输入目标文件夹的路径:')
i = 2
while True:
if not hasFile(pathDest,fileName):
copy_paste(os.path.join(pathSrc,fileName),os.path.join(pathDest,fileName))
break
elif not hasFile(pathDest,doFileName(fileName)):
copy_paste(os.path.join(pathSrc,fileName),os.path.join(pathDest,doFileName(fileName)))
break
elif not hasFile(pathDest,doFileName(fileName,i)):
copy_paste(os.path.join(pathSrc,fileName),os.path.join(pathDest,doFileName(fileName,i)))
break
else:
i+=1
def hasFile(path,fileName):
'''
判断文件是否存在
path:文件所在的路径
fileName:文件的名字
'''
return os.path.exists(os.path.join(path,fileName))
def doFileName(fileName,num=None):
'''
返回处理后文件的名字
如果num是None,只拼接副本
否则,拼接副本加数字
'''
newFileName = None
index = fileName.rfind('.')
if num==None:
if index!=-1:
newFileName = '%s - 副本%s'%(fileName[:index],fileName[index:])
else:
newFileName= '%s - 副本'%fileName
else:
if index!=-1:
newFileName = '%s - 副本 (%s)%s'%(fileName[:index],num,fileName[index:])
else:
newFileName= '%s - 副本 (%s)'%(fileName,num)
return newFileName
def copy_paste(pathSrc,pathDest):
'''赋值 粘贴'''
fileSrc = open(pathSrc,'rb')
fileDest = open(pathDest,'wb')
content = fileSrc.readline()
while content!=b'':
fileDest.write(content)
content = fileSrc.readline()
fileSrc.close()
fileDest.close()
'''
执行。。。。。。。
'''
main()
3.异常的捕捉
3.1 完整的格式内容:
try:
pass
except Exception as ex:
pass
else:
pass
finally:
pass
3.2 try except 用法
![](https://img.haomeiwen.com/i6851740/3f907ca93d5405ee.png)
·3.2.1 except 多个异常的情况
try:
print('-----test--1---')
open('123.txt','r')#如果123.txt文件不存在,那么会产生IOError异常
print('-----test--2---')
print(num)#如果num变量没有定义,那么会产生NameError异常
except(IOError,NameError):
#如果想通过一次except捕获到多个异常可以用一个元组的方式
# errorMsg里会保存捕获到的错误信息
print(errorMsg)
注意事项:·当捕获多个异常时,可以把要捕获的异常的名字,放到except后,并使用元组的方式仅进行存储
3.2.2 捕获异常具体描述
![](https://img.haomeiwen.com/i6851740/19f705f0f21fd2c3.png)
![](https://img.haomeiwen.com/i6851740/2373cee13cda71c1.png)
![](https://img.haomeiwen.com/i6851740/28d6702b06c0504b.png)
3.3 finally
注意:无论是否有异常,finally里代码都会执行
有一些资源使用完毕之后,需要关闭释放资源。
无论是否有异常,都得关闭,那么这样的代码可以写到finally中
import time
try:
f = open('test.txt')
try:
whileTrue:
content = f.readline()
iflen(content) ==0:
break
time.sleep(2)
print(content)
except:
#如果在读取文件的过程中,产生了异常,那么就会捕获到
#比如 按下了ctrl+c
pass
finally:
f.close()
print('关闭文件')
except:
print("没有这个文件")
3.4 异常的嵌套1
‘’‘
import time
try:
#f = open('test.txt')
f = open(r'C:\Users\Administrator\Desktop\xx.txt')
try:
while True:
content = f.readline()
if len(content) == 0:
break
num=1/0 #模拟一个异常
#time.sleep(2)
print(content)
#except:
#print('except...')
finally:
f.close()
print('关闭文件')
except:
print('没有这个文件')
'''
3.5 异常的嵌套2
def test1():
print("----test1-1----")
print(num)
print("----test1-2----")
'''
def test1():
print("----test1-1----")
try:
print(num)
except:
print('test1 except......')
print("----test1-2----")
'''
def test2():
print("----test2-1----")
test1()
print("----test2-2----")
def test3():
try:
print("----test3-1----")
test1()
print("----test3-2----")
except Exception as result:
print("捕获到了异常,信息是:%s"%result)
print("----test3-2----")
test3()
#print("------华丽的分割线-----")
#test2()
网友评论