zoukankan      html  css  js  c++  java
  • 面向对象作业2

    # 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
  • 相关阅读:
    待重写
    待重写
    待重写
    ReflectionUtils使用
    kafka消费组、消费者
    待重写
    Map接口常用实现类学习
    利用httpClient发起https请求
    sql常用格式化函数及字符串函数
    method reference
  • 原文地址:https://www.cnblogs.com/bk134/p/12661546.html
Copyright © 2011-2022 走看看