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.查看分数