单例模式,pickle模块,选课项目的分析
1. 单例模式
# 在IT行业中设计模式总共有23种 # 可以分为三大类 # 1. 创建型 # 2. 结构型 # 3. 行为型 """ 设计模式是前辈们发明的经过反复验证用于解决固定问题的固定套路 """ # 我们需要掌握设计模式之单例模式(23种之一) # 单例模式的意思是一个类只能产生一个对象, 用于节省资源 # 应用场景: # 有一个类中有很多非常牛逼的绑定给对象的方法,我们需要在很多地方使用它,那么不同的程序员来用不知道有没有产生对象,所以自己会创建一个新对象,如此往复则会造成资源的浪费 # 如何实现: # 我们需要在类实例化对象的时候进行干涉 >> >: 元类 # 单例模式: (可以有很多种编写方式) # 那么我们以干涉元类来实现单例模块 class MyTypeClass(type): def __call__(self, *args, **kwargs): if not hasattr(self, 'obj'): self.obj = super().__call__(*args, **kwargs) return self.obj return self.obj class MyClass(metaclass=MyTypeClass): def __init__(self, name): self.name = name obj1 = MyClass('jason') obj2 = MyClass('tony') print(id(obj1), id(obj2)) print(type(obj1), type(obj2))
"""
将该模块的目的仅仅是为了在选课系统中使用 后期会学习ORM就不会用pickle了 并且该模块只支持python 兼容性很差!!!
讲解这个模块只是为了等等制作选课系统的时候,进行使用
"""
# 需求:将对象保存到文件 并且取出来之后还可以使用对象的功能
import pickle
import json
class MyClass(object):
school = '家里蹲学校'
def __init__(self, name):
self.name = name
def choose_course(self):
print('%s正在选课' % self.name)
obj = MyClass('dragon')
print(obj.school)
obj.choose_course()
# with open(r'%s'%obj.name,'wb') as f:
# json.dump(obj, f)
# >>> 使用json模块,将类进行写入时,会发生报错,那么我们只能换一个模块来进行使用
# >>> 那么我们就用到了pickle模块,并且我们使用pickle模块读取数据获取的对象时,对象的功能与数据我们可以直接进行调用
# pickle可以
with open(r'%s' % obj.name, 'wb') as f:
pickle.dump(obj, f)
with open(r'dragon', 'rb') as f:
data = pickle.load(f)
print('---------------------------------')
print(data)
print(data.name)
print(data.school)
3. 选课系统项目分析
# 目的:为了练习面向对象编程 # 项目分析: 选课系统 角色:学校、学员、课程、讲师 要求: 1. 创建北京、上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开 3. 课程包含,周期,价格,通过学校创建课程 4. 通过学校创建班级, 班级关联课程、讲师 5. 创建学员时,选择学校,关联班级 5. 创建讲师角色时要关联学校, 6. 提供三个角色接口 6.1 学员视图, 可以登录,注册, 选择学校,选择课程,查看成绩 6.2 讲师视图, 讲师登录,选择学校,选择课程, 查看课程下学员列表 , 修改所管理的学员的成绩 6.3 管理视图,登录,注册,创建讲师, 创建班级,创建课程,创建学校 7. 上面的操作产生的数据都通过pickle序列化保存到文件里 # 架构设计 三层架构 展示层 学员功能 讲师功能 管理员功能 业务层 写员工,讲师,管理员功能的逻辑 数据层 models.py 存储所有角色类 db_handle.py
管理员视图
注册(admin_register)
登录(admin_login)
创建学校(create_school)
创建课程(create_course)
创建讲师(create_teacher)
讲师视图
登录(teacher_login)
查看教授课程(view_courses)
选择教授课程(teacher_check_courses)
查看课程学生(view_course_student)
评判学生分数(judging_student_scores)
学员视图
注册(student_register)
登录(student_login)
选择学校(check_school)
选择课程(student_check_course)
查看分数(view_stundet_scores)