# 3、加入序列化与反序列化操作
# 4、对象之间的关联采用id号
# 5、可以通过id找到对应的文件,然后从文件中反序列化出执行的学校、班级、课程、学生对象
import pickle import uuid import os BASE_PATH = os.path.dirname(__file__) # 父类 class Base: # 保存数据 def save(self): # 获取对象存放路径id user_dir = os.path.join( BASE_PATH, 'user_data', # 根据类名 + id 号,拼接对象存放的文件路径,更好管理对象 self.__class__.__name__ ) # 文件夹如果不存在,则创建 if not os.path.exists(user_dir): os.mkdir(user_dir) # 文件路径 user_path = os.path.join(user_dir, self.id) with open(user_path, 'wb') as f: pickle.dump(self, f) # 查看数据 def select(self, obj_id): # 获取对象存放路径id user_dir = os.path.join( BASE_PATH, 'user_data', # 根据类名 + id 号,拼接对象存放的文件路径,更好管理对象 self.__class__.__name__ ) # 文件夹如果不存在,则创建 if not os.path.exists(user_dir): os.mkdir(user_dir) # 文件路径 user_path = os.path.join(user_dir, self.id) with open(user_path, 'rb') as f: obj = pickle.load(f) return obj ''' # 保存对象方法 def save_obj(obj): user_path = os.path.join( '/python相关/python_files/01 python班级/python14期/作业讲解/day28/user_data', obj.id ) # 将对象写入user_path中 with open(user_path, 'wb') as f: pickle.dump(obj, f) # 获取文件中的对象 def select(obj_id): user_path = os.path.join( '/python相关/python_files/01 python班级/python14期/作业讲解/day28/user_data', obj_id ) # 读取文件中的对象 with open(user_path, 'rb') as f: obj = pickle.load(f) return obj # 调用类即创建对象 # School('上海校区', '上海') '8f1ad59c-fb72-4352-b0c5-d6ee0e89682d' # 根据id号,获取对象 obj = select('8f1ad59c-fb72-4352-b0c5-d6ee0e89682d') print(obj.__dict__) ''' # 学校类 class School(Base): def __init__(self, school_name, school_address): self.school_name = school_name self.school_address = school_address # 当调用学校类时,等同于创建学校功能,设置了学校id # id使用uuid4生成随机字符串 self.id = str(uuid.uuid4()) # 班级id号 self.classes_list = [] # [cla_obj.id, ] # 保存对象 # save_obj(self) self.save() # 学校创建班级 def create_course(self, classes_name, school_name): cls_obj = Classes(classes_name, school_name) # 将用户id保存到 self.classes_list.append(cls_obj.id) # 刷新学校对象的数据 self.save() return cls_obj # 班级类 class Classes(Base): def __init__(self, classes_name, school_name): self.classes_name = classes_name self.school_name = school_name self.course_list = [] # 生成班级id self.id = str(uuid.uuid4()) self.save() # 班级类创建课程 def create_course(self, course_id): self.course_list.append(course_id) school_obj = School('上海校区2', 'sh') # 学校对象创建课程 cls_obj = school_obj.create_course('上海14期', '上海校区2') # 0319a28e-84da-4b59-87e8-837ad28d2d39 # 0319a28e-84da-4b59-87e8-837ad28d2d39 print(cls_obj.id) # 课程类 class Course(Base): def __init__(self, course_name, course_period, course_price): self.course_name = course_name self.course_period = course_period self.course_price = course_price self.id = str(uuid.uuid4()) # 学生类 class Student(Base): def __init__(self, school_name, student_name, student_age, student_number, student_sex): self.school_name = school_name self.student_name = student_name self.student_age = student_age self.student_number = student_number self.student_sex = student_sex self.student_course_list = [] self.score_dic = {} self.id = str(uuid.uuid4()) def choice_course(self, course_name): self.student_course_list.append(course_name) # 设置默认分数为0 self.score_dic[course_name] = 0 # 老师类 class Teacher(Base): def __init__(self, teacher_name, teacher_age, teacher_sal, teacher_level): self.teacher_name = teacher_name self.teacher_age = teacher_age self.teacher_sal = teacher_sal self.teacher_level = teacher_level self.id = str(uuid.uuid4()) # 修改分数 def change_score(self, score, student_obj, course_name): # 修改学生成绩 student_obj.score_dic[course_name] = score