Day35 设计模式与选课系统项目讲解

Day35 设计模式与选课系统项目讲解

1、设计模式

如何理解设计模式
在IT行业有很多前辈针对固定得一些问题设计出了固定得解题套路

设计模式总共有23种
我们目前不需要掌握那么多种 后续慢慢看

设计模式的分类(三类)
创建型
结构型
行为型

设计模式之单例模式
类加括号调用多次只允许产生一个对象

举例
正常情况下 类名只要加括号实例化对象 执行几次就会产生几个不同的对象

class Myclass:
    pass

obj1 = Myclass()
obj2 = Myclass()
obj3 = Myclass()
print(id(obj1),id(obj2),id(obj3))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2152155778376 2152155574536 2152155574344

有时候我们不希望类频繁的产生不同的对象
类种有很多好用的方法 程序很多地方都需要使用(通过对象调用)
如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用你单例

方法一:使用元类干预对象的创建过程

class Mymetaclass(type):
    #做一个是否已经创建过对象的记录
    instance = None
    # 在元类种通过__call__来定制对象的创建
    def __call__(self, *args, **kwargs):
        #我们做一个判断 判断 是否存了一个对象
        if self.instance:
            #存了 那直接拿来返回
            return self.instance
        # 没有存 那么 直接照常执行对象的创建过程
        res=super().__call__(args,kwargs)
        # 因为没存 所以是第一次创 所以存一下 之后可以直接拿
        self.instance=res
        # 然后按照流程照常返回出去实例化
        return res

class Myclass(metaclass=Mymetaclass):
    def __init__(self,name):
        self.name=name
    pass

s1=Myclass('kk')
s2=Myclass('hh')
print(id(s1))
print(id(s2))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2870610689160
2870610689160

2、pickle 模块

pickle模块与json模块很像 都是用来做序列化 反序列化的
并且pickle模块支持python所有数据
但是pickle不支持跨语言传输 只能python自己跟自己玩 兼容性不好

为了比较方便的编写选课系统 我们需要将对象保存到文件 所以需要用该模块
后续我们不用 因为有更高级的方法>>>:ORM(对象关系映射)

class Myclass:
    def __init__(self,name):
        self.name=name
        
    def choice_course(self):
        print('选课系统')
        
obj=Myclass('jason')
#将对象保存至文件种 并且将来取出时 还可以通过句点符 随意调用
#import json
#with open(r'a.txt','w',encoding='utf8')as f:
#    f.write(json.dumps(obj))  
# 尝试了过后 json模块不行

import pickle

with open(r'a.txt', 'wb')as f:
    pickle.dump(obj, f)

with open(r'a.txt', 'rb')as f:
    res = pickle.load(f)

print(res.name)
res.choice_course()
>>>>>>>>>>>>>>>>>>>>>>>>>>>
kk
选课系统 <__main__.Myclass object at 0x00000220F54BFE08>

作业:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值