选课系统前戏

选课系统前戏

作业(将变量名转为大写)

class MyMataClass(type):
    def __call__(self, *args, **kwargs):
        args = [i.upper() for i in args]
        return super().__call__(*args,**kwargs)
class MyClass(metaclass=MyMataClass):
    def __init__(self,name, hobby):
        self.name = name
        self.hobby = hobby
    def __setattr__(self, key, value):
        self.__dict__[key] = value.upper()

obj = MyClass('joseph', 'read')
print(obj.name)
print(obj.hobby)
obj.gender = 'male'
print(obj.gender)

设计模式之单例模式

  • 在IT行业中设计模式总共有23种,可以分为三大类(这23种设计模式都是前辈根据经验和反复验证得出的解决固定问题的固定套路)

    • 创建型 单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
    • 结构型 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
    • 行为型 模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

单例模式(23三种模式之一)马上就可以使用

  • 单例模式的本质

    • 单例模式其实就是一个类只能产生一个对象的方法,主要用来节省资源
  • 应用场景

    • 在一个类种有很多的非常牛逼的绑定给对象的方法
    • 我们在很多地方都需要使用它 那么不同的程序员不知道这里面有没有产生对象
    • 这个时候程序员就会习惯性的自己创建一个新的对象,如此往复的话就会造成资源的浪费,为了解决这种情况就发明了单例模式,只允许一个对象存在
    • 就需要我们在对象实例化的时候进行主动干涉不让他产生新的对象 >>>: 元类
  • 单例模式的编写(套路不固定,只要符合要求那么他就是单例模式)

    • class Single(type):
          new_obj = None
          def __call__(self, *args, **kwargs):
              if not self.new_obj:
                  obj = super().__call__(*args,**kwargs)
                  self.new_obj = obj
                  return self.new_obj
              return self.new_obj
      class MyClass(metaclass=Single):
          def __init__(self,name):
              self.name = name
      
      obj1 = MyClass('joseph')
      obj2 = MyClass('trump')
      print(id(obj1),id(obj2))  # 2308504196576 2308504196576  # 两个地址一样证明内部是一样的
      print(obj1.__dict__,obj2.__dict__)  # {'name': 'joseph'} {'name': 'joseph'}  # 打印出来也是一样的
      

image

pickle模块

  • 模块介绍

    • pickle模块和json有点类似,但是我们学这个模块只会在选课系统中使用,之后的学习种就会学习使用ORM就不会使用pickle这个模块,并且这个模块只支持python兼容性很差。
  • 需求:将对象保存到文件,并且取出来之后还可以使用对象的功能

    • import pickle
      
      class MyClass(object):
          school = '中国传媒大学'
          def __init__(self,name):
              self.name = name
          def choice_course(self):
              print(f'{self.name}正在选课')
      obj = MyClass('joseph')
      print(obj.school)  # 中国传媒大学
      obj.choice_course()  # joseph正在选课
      # 使用json不能完成转化,所以使用pickle
      with open(f'{obj.name}', 'wb')as f:
          pickle.dump(obj,f)
      
      
      with open(r'joseph', 'rb')as f:
          data = pickle.load(f)
      
      print(data)  # <__main__.MyClass object at 0x0000022F04F681F0>
      print(data.name)  # joseph
      print(data.school)  # 中国传媒大学
      

选课系统架构设计

  • 项目要求

    • 项目分析:
        	选课系统
      		角色:学校、学员、课程、讲师
      		要求:
            1. 创建北京、上海 2 所学校
            2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
            3. 课程包含,周期,价格,通过学校创建课程
            4. 通过学校创建班级, 班级关联课程、讲师
            5. 创建学员时,选择学校,关联班级
            5. 创建讲师角色时要关联学校,
            6. 提供三个角色接口
                6.1 学员视图, 可以登录,注册, 选择学校,选择课程,查看成绩
                6.2 讲师视图, 讲师登录,选择学校,选择课程, 查看课程下学员列表 , 修改所管理的学员的成绩
                6.3 管理视图,登录,注册,创建讲师, 创建班级,创建课程,创建学校
            7. 上面的操作产生的数据都通过pickle序列化保存到文件里
      

image

  • 架构设计

    • 三层架构
      • 展示层
        • 管理员功能
        • 讲师功能
        • 学院功能
      • 核心内容层
        • 主要功能代码
      • 数据存储
        • 存储数据

选课系统功能分析

  • 管理员视图
    • 注册
    • 登录
    • 创建学校
    • 创建课程
    • 创建讲师
  • 讲师视图
    • 登录
    • 查看教授课程
    • 选择教授课程
    • 查看课程学生
    • 批判学生分数
  • 学生视图
    • 注册
    • 登录
    • 选择学校
    • 选择课程
    • 查看分数

image

posted @ 2022-08-01 20:05  Joseph-bright  阅读(26)  评论(0编辑  收藏  举报