类
创建类
创建一个小狗的类
class Dog():
def __int__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(self.name.title() + " is now sitting")
def roll_over(self):
print(self.name.title() + " rolled over!")
这里我们定义了一个Dog类,python中首字母大写的名称指的是类
根据类来创建对象叫做实例化。
__int__(self,name,age)相当于构造函数,每当创建一个对象的时候会自动执行
self参数实际上就是对象本身的引用,相当于C++里的this指针,我们在调用类方法的时候不需要管它,它会自动传递实例的引用
我们可以直接在类内初始化一个值,只需要在初始化函数里添加相应的语句即可。
修改类中属性的值
1.通过实例进行修改
a.age=10//直接通过实例来修改狗狗的年龄
2.通过类方法进行设置
def changeAge(aimAge):
self.age=aimAge
将这个方法添加到类中,并调用这个方法即可修改年龄
类的继承
class Car():
#汽车类
def __int__(self,make,model,year):
self.make=make
self.model=model
self.year=year
self.odometer_reading=0#初始化里程为0
def get_descriptive_name(self):
long_name=str(self.year+' '+self.make+' '+self.model)
return long_name.title()
def read_odometer(self,mileage):
if mileage >= self.odometer_reading:
self.odometer_reading=mileage
else:
print("你不能这样做")
#电动汽车类
class ElectricCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)#这条代码是初始化父类所有属性
self.battery_size=70#电动车特有电瓶属性
注意事项:创建子类时,父类必须在前面,而且必须在子类括号里指明父类的名称
super()是一个特殊函数,它可以将子类和父类关联起来,可以调用父类的__init__()方法,使子类中包含父类的所有属性
只要子类方法里的方法与父类方法同名,python就只会执行子类里的方法
规范
类名首字母大写
类方法使用小写字母,且单词之间使用_分隔
类方法之间空一行来分隔
类之间使用两个空行来分隔
导入类
导入类和导入模块的方法是一样的
1.import 文件名
可使用该文件中的所有类 以及函数,但是注意,用类来定义实例时候要加文件名.类名
2.from 文件名 import 类名
直接使用类名来定义实例即可
3. import 文件名 as 改后的名字
4.from 文件名 import 类名 as 改后的名字
文件和异常
从文件中读取数据
#aa.txt
123
456
789
在当前目录下创建一个aa.txt的文件
with open("aa.txt") as fp:
c=fp.read()
print(c)
open函数参数为要打开文件的文件名,返回一个表示该文件的对象,用as 将其存储在fp中
后续对fp的操作就相当于对相应的文件进行操作,read方法是从文件头读到文件尾,返回一个字符串,当读到文件尾部的时候,返回一个空字符串
输出结果为:
我们可以使用rstrip方法来删除这个空白
rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
with open("aa.txt") as fp:
c=fp.read()
print(c.rstrip())
文件路径
如果要读取的文件不在当前目录内,而是在当前目录的文件内,需要提供文件路径
windows下是这样的
逐行读取
with open("aa.txt") as fp:
for i in fp:
print(i)
会发现输出变成这样了
123
456
789
为什么会有这么多空行呢
因为文件中每行有一个换行符,再加上print也会输出一个换行符。可以通过rstrip方法来消除文件行换行符
with open("aa.txt") as fp:
for i in fp:
print(i.rstrip())
创建一个包含文件各行内容的列表
with open("aa.txt") as fp:
c=fp.readlines()
print(c)
输出结果是
['123\n', '456\n', '789\n']
可以使用rstrip来消除'\n'
json.load函数
可以将json格式文件中数据以字符串的形式读取出来
import json
fp = open('aa.txt','r')
a = json.load(fp)
print(a)
写入文件
with open('aa.txt','w') as fp:
fp.write("123456")
将‘123456’写入aa.txt文件
注意w是指只写的方式打开文件,r的只读方式打开文件,r+是可读可写的方式打开文件,a是以接着上次的写,w是清空文件,之后再写。python默认方式是只读。
如果想写入多行的话,需要加上换行符
也可以使用库中的json.dump()函数
与write方法不同的时,json.dump()函数可以将写入文件的数据
自动转换为str类型。
列表和字典无法通过write存储到文件中,因此要使用json.dump()将字典转换为一种叫json格式来存储它
json.dump(x,y) x是要存的数据,y是文件对象
import json
a={'a':1,'b':2}
with open('aa.txt','w') as fp:
json.dump(a,fp)
'''
aa.txt
{"a": 1, "b": 2}
'''
异常
程序在运行时,如果Python 解释器遇到到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常
程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise)异常
程序开发时,很难将所有的特殊情况都处理的面面俱到,通过异常捕获可以针对突发事件做集中的处理,从而保证程序的稳定性和健壮性
捕获异常
在程序开发中,如果对某些代码的执行不能确定是否正确,可以增加try(尝试)来捕获异常
捕获异常最简单的语法格式:
try:
尝试执行的代码
except:
出现错误后的处理
try 下面编写要尝试的代码。
except 如果不是,下面编写尝试失败的代码
处理ZeroDivisionError异常
print(5/0)
这一条代码,python会报错
使用try-except
try:
print(5/0)
except ZeroDivisionError:
print("error")
意思是执行try中的语句,然后如果出错,就会执行except中的内容
在程序执行时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了
语法如下:
try:
#尝试执行的代码
except 错误类型1:
except 错误类型2:
except Exception as result:
print("未知错误 %s"% result)
举个例子
try:
num = int(input("请输入整数:"))
print(8/num)
except ValueError:
print("请输入正确的整数")
except ZeroDivisionError:
print("除 0 错误")
捕获未知错误
在开发时,要预判到所有可能出现的错误,还是有一定难度的
如果希望程序无论出现任何错误,都不会因为Python解释器抛出异常而被终止,可以再增加一个except
语法如下
except Exception as result:
print("未知的错误 %s"%s result)
else 代码块
try:
print(3/2)
except ZeroDivisionError:
print("error")
else:
print("no error")
如果try里的代码成功执行了,则执行else里的内容。
finally代码块
无论执行成功与否,都会执行finally代码块里的代码
完整代码展示
try:
print(8/a)
except ZeroDivisionError:
print("error")
except Exception as result:
print("未知错误 %s"% result)
else:
print("执行成功")
finally:
print("无论执行是否成功,都会执行的代码")
输出结果
未知错误 name 'a' is not defined
无论执行是否成功,都会执行的代码
抛出raise异常
在开发中,除了代码执行出错Python解释器会抛出异常之外
还可以根据应用程序特有的业务需求主动抛出异常
示例
提示用户输入密码,如果长度少于 8,抛出异常
注意
当前函数只负责提示用户输入密码,如果密码长度不正确,需要其他的函数进行额外处理
因此可以抛出异常,由其他需要处理的函数捕获异常
4抛出异常
Python中提供了一个Exception异常类
在开发时,如果满足特定业务需求时,希望抛出异常,可以:
创建一个Exception的对象
使用raise关键字抛出异常对象
def input_password():
pwd = input("请输入密码:")
if len(pwd) >= 8:
return pwd
e = Exception("密码长度不够")
raise e
try:
user_pwd = input_password()
print(use_pwd)
except Exception as result:
print("发现错误:%s"%result)