本次内容:自定义异常类+面对对象案例
>> Python每日笔记—目录 <<
自定义异常类
自定义异常类,之所以没有和之前的异常放在一起,是因为那时还没有学习面向对象的内容。
案例:比对输入密码长度,如果长度小于3则抛出异常
'''自定义一个异常类
python中抛出自定义异常的语法: raise 异常类对象
'''
class ShortInputError(Exception):
def __init__(self, length, min_len):
# 用户输入密码的长度
self.length = length
# 系统要求的最少长度
self.min_len = min_len
# 设置异常的描述信息
def __str__(self):
return '你输入的密码长度是%d,密码长度不能小于%d' % (self.length, self.min_len)
def main():
# 抛出异常
try:
password = input('请输入密码:')
length = len(password)
if length < 3:
# 抛出异常类创建的对象
raise ShortInputError(length, 3)
except Exception as e:
print(e)
else:
print("没有异常密码输入完成")
# 调用一下函数
main()
面向对象案例-学生管理
首先定义一个学生类,编写构造函数,有姓名、性别、电话属性
'''定义学生类'''
class Student(object):
def __init__(self, name, gender, tel):
self.name = name
self.gender = gender
self.tel = tel
def __str__(self):
return self.name + ',' + self.gender + ',' + self.tel
'''需求:
1、存储数据的位置 student.data(文件)
加载文件数据
修改数据后保存到文件
2、存储当前数据的形式:列表存储学生对象
3、系统功能:
添加学生
删除学生
修改学生
查询学生信息
显示所有学生信息
保存学生信息
退出系统
'''
# 导入类
from Day08.student import Student
class StudentManager(object):
def __init__(self):
# 存储数据所用的列表,命名为student_list
self.student_list = []
# 定义功能函数
# 2.1 显示功能函数
def show_menu(self):
print("请选择如下功能:")
print("1、添加学生")
print("2、删除学生")
print("3、修改学生信息")
print("4、查询学生信息")
print("5、显示所有学生信息")
print("6、保存学生信息")
print("7、加载学生信息")
# 2.2 添加学生
def add_student(self):
# 用户输入姓名、性别、手机号
name = input("请输入姓名:")
gender = input("请输入性别:")
tel = input("请输入手机号:")
# 创建学生对象
student = Student(name, gender, tel)
# 将该学生对象添加到列表
self.student_list.append(student)
# 打印信息
print(self.student_list)
print(student)
# 2.3 删除学生
def del_student(self):
# 用户输入学生的姓名
del_name = input("请输入要删除的学生姓名:")
# 如果用户输入的目标学生存在则删除,否则提示不存在
for i in self.student_list:
if i.name == del_name:
self.student_list.remove(i)
break
else:
print("查无此人")
# 打印学生列表,验证是否删除
print(self.student_list)
# 2.4 修改学生信息
def modify_student(self):
# 用户输入学生的姓名
mod_name = input("请输入要修改的学生姓名:")
# 如果用户输入的目标学生存在则删除,否则提示不存在
for i in self.student_list:
if i.name == mod_name:
new_name = input("请输入新的姓名")
new_gender = input("请输入新的性别")
new_tel = input("请输入新的电话")
# 输入不为空则修改
if new_name != "":
i.name = new_name
if new_gender != "":
i.gender = new_gender
if new_tel != "":
i.tel = new_tel
print("修改成功,姓名为%s,性别为%s,电话为%s" % (new_name, new_gender, new_tel))
break
else:
print("查无此人")
# 打印学生列表,验证是否修改
print(self.student_list)
# 2.5 查询学生信息
def search_student(self):
# 输入查询的学生姓名
search_name = input("请输入查询的姓名:")
for i in self.student_list:
if i.name == search_name:
print(i)
break
else:
print("查无此人")
# 2.6 显示所有学生信息
def all_student(self):
for i in self.student_list:
print(i)
# 2.7 保存学生信息,写入文件
def save_student(self):
# 打开文件
file1 = open("student.data", 'w', encoding="utf-8")
# 写入文件
'''
类的__dict__属性和对象的__dict__属性
注意:文件写入的数据不能是学院对象的内存地址,将学生数据转换成列表字典数据,
然后再进行存储
'''
# 使用推导式
new_list = [i.__dict__ for i in self.student_list]
print(new_list)
# 文件内数据要求是字符串类型,需要先转换成字符串类型
file1.write(str(new_list))
file1.close()
# 2.8 加载学生信息,读取文件
def read_student(self):
global file1
try:
file1 = open("student.data", 'r', encoding="utf-8")
except:
file1 = open("student.data", 'w', encoding="utf-8")
else:
# 读取数据并添加
data = file1.read()
'''
文件中读取的数据都是只读,且字符串内部为字典数据
需要转换数据类型,在转换为字典对象后存储
eval()函数,用来执行一个字符串表达式,并返回表达式的值
'''
new_list = eval(data)
# 使用推导式简化代码
self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
finally:
file1.close()
def run(self):
self.show_menu()
while True:
num = int(input("请输入功能"))
if num == 1:
self.add_student()
elif num == 2:
self.del_student()
elif num == 3:
self.modify_student()
elif num == 4:
self.search_student()
elif num == 5:
self.all_student()
elif num == 6:
self.save_student()
elif num == 7:
self.read_student()
student.data文件内容:
[{'gender': '1', 'tel': '1', 'name': '1'}, {'gender': '2', 'tel': '2', 'name': '2'}]
今天通过这个案例,面对对象的内容就结束了
明天开始图形化界面GUI的设计,提前高能预警
tip:说明一下,为什么把文件分开放置,而不写在一个文章中,我个人觉得,一整片万字长文读起来很累,眼睛看的很累,所以我把python的各个内容相关的放在一起,方便每日学习。
如果这篇文章对你有帮助,点个赞呗~