python基础学习-day28==课后作业练习
一、今日作业:
1.练习上课作业讲解的面向对象代码,明天默写
2.基于上课作业讲解的面向对象代码,扩写Student类
3.加入序列化与反序列化操作
4.对象之间的关联采用id号
5.可以通过id找到对应的文件,然后从文件中反序列化出执行的学校、班级、课程、学生对象
import uuid import pickle class School: school_name = 'OLDBOY' def __init__(self,nickname,address): self.uid = str(uuid.uuid4()) self.nickname = nickname self.address = address self.classes = [] def addclass(self,class_uid): self.classes.append(class_uid) def tell_class(self): print(self.nickname.center(60, '=')) for class_uid in self.classes: with open(f'{class_uid}.pkl','rb')as f: res = pickle.load(f) res.tell_class() def save(self): with open(f'{self.uid}.pkl','wb')as f: pickle.dump(self,f) class Class: def __init__(self,name): self.uid = str(uuid.uuid4()) self.name = name self.course = None def addcourse(self,course_uid): self.course = course_uid def tell_class(self): print('班级名:%s '%(self.name),end='') with open(f'{self.course}.pkl','rb')as f: res = pickle.load(f) res.tell_course() def save(self): with open(f'{self.uid}.pkl', 'wb')as f: pickle.dump(self, f) class Course: def __init__(self, name, cycle, price): self.uid = str(uuid.uuid4()) self.name = name self.cycle = cycle self.price = price def tell_course(self): print('课程名称:%s 课程周期:%s 课程价格:%s'%(self.name,self.cycle,self.price)) def save(self): with open(f'{self.uid}.pkl', 'wb')as f: pickle.dump(self, f) class Student: def __init__(self,name,age,id,sex): self.name = name self.age = age self.uid = str(uuid.uuid4()) self.sex = sex self.score = 0 self.course_uid = None def choice(self,course_uid): self.course_uid = course_uid def tell_student(self): print('id:%s 姓名:%s 年龄:%s 性别:%s 分数:%s '%(self.uid,self.name,self.age,self.sex,self.score),end='') def save(self): with open(f'{self.uid}.pkl', 'wb')as f: pickle.dump(self, f) class Teacher: def __init__(self,name,age,salary,leve): self.uid = str(uuid.uuid4()) self.name = name self.age = age self.salary = salary self.leve = leve def score(self,student_obj,grade): student_obj.score = grade def tell_teacher(self): print('姓名:%s 年龄:%s 薪资:%s 等级:%s '%(self.name,self.age,self.salary,self.leve),end='') def save(self): with open(f'{self.uid}.pkl', 'wb')as f: pickle.dump(self, f) def get(id): with open(f'{id}.pkl','rb')as f: res = pickle.load(f) print(res.__dict__) #创建学校对象 school_obj = School('老男孩魔都校区','上海') #创建班级对象 class_obj = Class('14期') class_obj2 = Class('15期') #创建课程对象 course_obj = Course('python开发','5个月',1000) course_obj2 = Course('luinex开发','1个月',10000) #将班级对象的uid存到学校对象中 school_obj.addclass(class_obj.uid) school_obj.addclass(class_obj2.uid) #将课程对象的uid存到班级对象中 class_obj.addcourse(course_obj.uid) class_obj2.addcourse(course_obj2.uid) #保存对象 school_obj.save() class_obj.save() class_obj2.save() course_obj.save() course_obj2.save() #打印数据 school_obj.tell_class() #从文件中根据uid去出数据 get(school_obj.uid) get(class_obj.uid) get(course_obj.uid) #创建学生对象 stu1 = Student('张三',18,2017050222,'男') #选课 stu1.choice(course_obj.uid) teach1 = Teacher('李四',18,20000,'特级教师') teach1.score(stu1,90) stu1.save() teach1.save() stu1.tell_student()