2、基于上课作业讲解的面向对象代码,扩写Student类
3、加入序列化与反序列化操作
4、对象之间的关联采用id号
5、可以通过id找到对应的文件,然后从文件中反序列化出执行的学校、班级、课程、学生对象
import pickle import uuid class School: school_name = 'OLDBOY' def __init__(self, nickname, addr): self.nickname = nickname self.addr = addr self.uuid = uuid.uuid4() self.classes = [] self.save_info() def relate_class(self, class_obj): self.classes.append(class_obj.uuid) self.save_info() def save_info(self): with open(f'db\school_file\{self.uuid}.pkl', 'wb') as f: pickle.dump(self, f) def get_class(self): print(self.nickname.center(60, '=')) # 打印班级开班的课程信息 for class_uuid in self.classes: with open(f'db\class_file\{class_uuid}.pkl', 'rb') as f: class_obj = pickle.load(f) class_obj.get_course() class_obj.get_student() class Class: def __init__(self, name): self.name = name self.course = None self.students = [] self.uuid = uuid.uuid4() self.save_info() def relate_course(self, course_obj): self.course = course_obj.uuid self.save_info() def save_info(self): with open(f'db\class_file\{self.uuid}.pkl', 'wb') as f: pickle.dump(self, f) def get_course(self): print('%s' % self.name, end=" ") with open(f'db\course_file\{self.course}.pkl', 'rb') as f: course_obj = pickle.load(f) course_obj.course_info() def get_student(self): print('%s' % self.name, end=" ") for student_uuid in self.students: with open(f'db\student_file\{student_uuid}.pkl', 'rb') as f: student_obj = pickle.load(f) student_obj.student_info() class Course: def __init__(self, name, period, price): self.name = name self.period = period self.price = price self.uuid = uuid.uuid4() self.save_info() def course_info(self): print('<课程名:%s 时长:%s 价格:%s>' % (self.name, self.period, self.price)) def save_info(self): with open(f'db\course_file\{self.uuid}.pkl', 'wb') as f: pickle.dump(self, f) class Student: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex self.uuid = uuid.uuid4() self.my_class = None self.my_course = None self.save_info() def student_info(self): print('<学生名字:%s 年龄:%s 性别:%s>' % (self.name, self.age, self.sex)) def relate_class(self, class_obj): self.my_class = class_obj.uuid self.my_course = class_obj.uuid class_obj.students.append(self.uuid) self.save_info() class_obj.save_info() def save_info(self): with open(f'db\student_file\{self.uuid}.pkl', 'wb') as f: pickle.dump(self, f)
# 创建校区 school_obj1 = School('老男孩魔都校区', '上海') school_obj2 = School('老男孩帝都校区', '北京') # # 创建班级 class_obj1 = Class('脱产14期') class_obj2 = Class('脱产15期') class_obj3 = Class('脱产29期') # 上海校区开了:脱产14期,上海校区开了脱产15期 school_obj1.relate_class(class_obj1) school_obj1.relate_class(class_obj2) # 北京校区开了:脱产29期 school_obj2.relate_class(class_obj3) # 1、创建课程 course_obj1 = Course('python全栈开发', '6mons', 20000) course_obj2 = Course('linux运维', '5mons', 18000) # 3、为班级关联课程对象 class_obj1.relate_course(course_obj1) class_obj2.relate_course(course_obj2) class_obj3.relate_course(course_obj1) stu_obj1 = Student('jack', 18, 'male') stu_obj2 = Student('egon', 18, 'female') stu_obj3 = Student('alex', 18, 'female') stu_obj1.relate_class(class_obj1) stu_obj2.relate_class(class_obj2) stu_obj3.relate_class(class_obj3) school_obj1.get_class() school_obj2.get_class()