Day 35
今日内容概要
- 设计模式
- pickle模块
- 选课系统项目分析
- 选课系统架构设计
今日内容详细
1.设计模式
1.什么是设计模式?
在IT行业有很多前辈针对固定的问题设计出固定的解决套路
2.设计模式共有23种
3.设计模式分三大类:创建型、结构型、行为型
4.设计模式——单例模式
类加括号调用多次只允许产生一个对象
class MyClass:
pass
obj1=MyClass()
obj2=MyClass()
print(id(obj1),id(obj2))#2485125659088 2485125478240
正常情况下类名加括号实例化产生对象时,执行几次就产生几个对象
但是产生不同的对象就会占用一些内存浪费资源,所以就用到了单例模式
方式1:使用元类干预对象的创建过程
#创建一个元类继承type
class MyMeTaClass(type):
#记录是否已经创建了对象
instance = None
def __call__(self,*args,**kwargs):
if self.instance:
return self.instance
#获得空对象
obj = super().__call__(*args, **kwargs)
#保存对象
self.instance = obj
#返回空对象
return obj
class Single(metaclass = MyMeTaClass):
def __init__(self, name):
self.name = name
obj1 = Single('jason')
obj2 = Single('torry')
print(id(obj1),id(obj2),)#1593437556992 1593437556992
print(obj1.name)#jason
print(obj2.name)#jason
2.pickle模块
1.pickle模块与json模块很像 都是用序列化 反序列化的
2.优点:支持python所有数据类型
3.缺点:不支持跨语言传输,只能python自己使用,兼容性不好
本周选课系统,需要用该模块将对象保存到文件中(json不能实现),后续不会再用,因为有更高级的方法:ORM(对象关系映射)
class MyClass:
def __init__(self, name):
self.name = name
def choice_course(self):
print('%s正在选课'%self.name)
obj=MyClass('jason')
#需求:将对象保存到文件,且取出后还可以通过句点符随意调用
方法1:错误
with open(r'a.txt', 'w', encoding='utf8') as f:
f.write(obj)
注意:常规的文件操作不行,只能产生文件里面没内容
方法2:错误
import json
with open(r'a.txt', 'w', encoding='utf8') as f:
f.write(json.dumps(obj))
注意:json模块也不行,只能产生文件里面没内容
方法3:正确
import pickle
with open(r'a.txt','wb') as f:
# dumps形式存入
# f.write(pickle.dumps(obj))
# dump形式存入
pickle.dump(obj,f)
with open(r'a.txt','rb') as f:
#load形式取出
data = pickle.load(f)
print(data)#打印出来是一个对象<__main__.MyClass object at 0x000002484AE56A60>
print(data.name)#jason
data.choice_course()#jason正在选课
"""
pickle有一个限制:在当前程序名称空间中一定要有产生该对象类的存在,如果已经存入进去,把类清除后再取出会报错
"""
3.选课系统项目分析
选课系统
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux,python,go 3个课程,linux/py在北京开,go在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级,班级关联课程、讲师,创建学员时,选择学校,关联班级
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.查看分数
4.选课系统架构设计
三层架构:
功能展示层:
src.py
admin_view.py
teacher_view.py
student_view.py
核心逻辑层:
admin_interface.py
teacher_interface.py
student_interface.py
数据处理层:
db_hanlder.py
model.py
作业
1.整理今日内容及博客
2.描述出选课系统管理员注册功能完整逻辑
3.尝试编写管理员其他功能
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/tech/python/278270.html