继承性
class Horse:
def __init__(self, name):
self.name = name
def run(self):
print('马在跑')
def show_info(self):
return "the name of the horse:{0}".format(self.name)
class Donkey:
def __init__(self, name):
self.name = name
def run(self):
print('驴在跑')
def show_info(self):
return "the name of the donkey:{0}".format(self.name)
def roll(self):
print("驴打滚...")
class Mule(Horse, Donkey):
def __init__(self, name, age):
super().__init__(name)
self.age = age
def show_info(self):# 对父类方法的重写
return "骡:{0},{1}岁了".format(self.name, self.age)
- 私有成员不被继承
- 支持多继承,继承多个父类优先继承左侧
- 只有调用父类析构函数时需要使用
super
其他的不需要
多态性
- 多态:指的是一类事物有多种形态,比如aniaml类有,cat,dog,pig,均为animal的不同形态
- 多态性:指的是同一事物在不同情境下有不同的效果
class Animal:
def __init__(self, name):
self.name = name
def show_info(self):
print("the name of the horse:{0}".format(self.name))
class Donkey(Animal):
def __init__(self, name):
self.name = name
def show_info(self):
print("the name of the donkey:{0}".format(self.name))
class Mule(Animal):
def __init__(self, name):
self.name = name
def show_info(self):
print("骡:{0}".format(self.name))
def func(x):
x.show_info()
d=Donkey('dd')
m=Mule('mm')
func(d)
func(m)
func
函数实现了传入参数不同,调用同名函数却执行了不同的操作,这就是多态性。
多态是一种python的特性,多态是基于继承实现的,子类对父类方法的重写实际上就是多态的实现形式。
异常
使用try-except
i=input('请输入数字:')
n=8888
try:
#可能发生异常的代码
result = n/ int(i)
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
#异常处理
print("不能除以0,异常{}".format(e))
#except (ZeroDivisionError,ValueError) as e:
# print("不能除以0,异常{}".format(e))
#同时捕获多个异常,减少代码量
ZeroDivisionError
:具体异常类型
e
:异常对象,是一个变量
制定具体异常时,只有发生此类型异常才会执行内部语句,只使用except可以捕获所有类型的异常
多个异常类型
try:
#可能发生异常的代码
except 异常类型1:
#异常处理
except 异常类型2:
#异常处理
except 异常类型3:
#异常处理
except:
处理其他异常
嵌套的异常语句
i = input('请输入数字:')
n = 8888
try:
result = n / int(i)
try:
print(result)
print('{0}除以{1}等于{2}'.format(n, i, result))
except ZeroDivisionError as e:
print("不能除以0,异常{}".format(e))
except ValueError as e:
print("输入的是无效数字,异常{}".format(e))
finally:
#释放资源
使用finally
释放资源:无论有无异常都会执行finally
代码块
自定义异常
需要继承Exception
类或其子类
class ZhijieketangException(Exception):
def __init__(self, message):
super().__init__(message)
文件读取
文件打开:open(file, mode='r', encoding=None, error=None)
-
file:要打开的文件,如果是字符串,表示文件名,文件名既可以是绝对路径也可以是相对路径。如果是整数,则表示已经打开的文件。
-
mode:用于设置文件的打开模式,用字符串表示
-
encoding:指定打开文件时的编码,默认时UTF-8,主要用于打开文本文件
- rt或r:只读
- wt或w:只写
- xt或x:独占创建模式
- at或a:追加模式
- rb:二进制文件模式,类似于rt
- wb:二进制文件模式,类似于wt
- xb:二进制文件模式,类似于xt
- ab:二进制文件模式,类似于at
- r+:读写模式,如果文件不存在,则抛出异常
- w+:读写模式,如果文件不存在,则创建文件
- a+:追加文本文件模式,如果文件不存在,则创建文件
- rb+:二进制文件模式,类似于r+
- wb+:二进制文件模式,类似于w+
- ab+:二进制文件模式,类似于a+
-
errors:用来指定在文本文件发生编码错误的时候如何处理
f=open('test.txt','w+')
f.write('world')
print('创建文件test.txt,写入world')
f=open('test.txt','r+')
f.write('hello')
print('打开文件test.txt,hello覆盖文件内容')
f=open('test.txt','a')
f.write(' ')
print('打开文件test.txt,文件末尾追加空格')
#fname='D:\\STUDY\\python\\125\\test.txt'
fname=r'D:\STUDY\python\125\test.txt'
f=open(fname,'a+')
f.write('world')
print('打开文件test.txt,文件末尾追加world')
fname=r'D:\STUDY\python\125\test.txt'
:采用原始字符串表示绝对路径文件名,其中反斜杠不需要转义
fname='D:\\STUDY\\python\\125\\test.txt'
:采用普通字符串表示绝对路径文件名,其中反斜杠需要转义(可以用/
代替\\
)
文件关闭
- 使用
f.close()
关闭文件 - 使用
with as
自动资源管理
f_name = 'text.txt'
with open('text.txt', 'r') as f:
for line in f:
print(line.strip())
读写文本文件
read(size=-1)
:从文件中读取字符串,size限制读取的字符数,size=-1指对读取的字符数没有限制。readline(size=-1)
:在读取到换行符或文件为时返回单行字符串,如果已经到文件尾,则返回一个空字符串,size限制读取的字符数,size=-1指对读取的字符数没有限制。readlines()
:读取文件数据到一个字符串列表中,每一行数据都是列表的一个元素。write(s)
:将字符串s写入文件中,并返回写入的字符数。writelines(lines)
:像文件中房协如一个字符串列表,不添加行分隔符,因此通常为每一行末尾都提供行分隔符。flush()
:刷新缓冲区,在文件没有关闭的情况下将数据写入文件中。
f_name = 'src_file.txt'
with open(f_name, 'r', encoding='utf-8') as f:
lines = f.readlines()
copy_f_name = 'dest_file.txt'
with open(copy_f_name, 'w', encoding='utf-8') as copy_f:
copy_f.writelines(lines)
print('文件复制成功')