• 欢迎光临~

8.1 设计模式与pickle模块

开发技术 开发技术 2022-08-01 次浏览

今日内容

设计模式

  • 一、如何理解设计模式

    • 1.在IT行业有很多前辈针对固定的一些问题设计出了固定的解决套路

    • 2.设计模式总共有23种

    • 3.设计模式的分类(三类)

      • 1.创建型
      • 2.结构型
      • 3.行为型
  • 二、设计模式之单例模式

    • 类加括号调用多次只允许产生一个对象(引出)
class MyClass:
    pass
    
m1 = MyClass()
m2 = MyClass()
m3 = MyClass()
print(m1)  # <__main__.MyClass object at 0x000002470C528358>
print(m2)  # <__main__.MyClass object at 0x000002470C5282E8>
print(m3)  # <__main__.MyClass object at 0x000002470C528320>

正常情况下 类名只要加括号实例化产生对象 执行几次就会产生几个不同的对象
有时候我们不希望类频繁的产生不同的对象
类中有很多很好用的方法 程序很多地方都需要使用(通过对象调用)
如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用单例
  • 方式一、使用元类干预对象的创建过程
class MyClass(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=MyClass):
    def __init__(self, name):
        self.name = name
    
m1 = Single('joker')
m2 = Single('jason')
m3 = Single('tony')
print(id(m1))  # 2229749450120
print(id(m2))  # 2229749450120
print(id(m3))  # 2229749450120
print(m1.name)  # joker
print(m2.name)  # joker
print(m3.name)  # joker

pickle模块

  • 一、什么是pickle模块
    • 1.pickle模块跟json模块很像 都是用来做序列化 反序列化的
    • 2.pickle模块支持python的所有类型 但仅限于python 不能跨语言并且只能使用二进制模式储存 兼容性太差
    • 3.但是必须要保证当初创建这个对象的代码存在

需求:将对象保存到文件 并且将来取出之后还可以通过句点符随意调用

常规的文件操作不行

class MyClass:
    def __init__(self, name):
        self.name = name

    def choice_course(self):
        print('%s正在选课' % self.name)


obj = MyClass('jack')
with open(r'a.txt','w',encoding='utf8') as f:
	f.write(obj)

json模块也不行

import json
with open(r'a.txt','w',encoding='utf8') as f:
	f.write(json.dumps(obj))

pickle模块
但是必须要保证当初创建这个对象的代码存在

import pickle

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

with open(r'a.txt', 'rb') as f:
    data = pickle.load(f)
print(data)  # <__main__.MyClass object at 0x000001113BF38588>
print(data.name)  # jack
data.choice_course()  # jack正在选课

选课系统项目分析

选课系统
  角色:学校、学员、课程、讲师
  要求:
    1. 创建北京、上海 2 所学校
    2. 创建linux , python , go 3个课程 , linuxpy 在北京开, 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.查看分数

系统架构设计

三层架构

功能展示层
	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

8.1 设计模式与pickle模块

程序员灯塔
转载请注明原文链接:8.1 设计模式与pickle模块
喜欢 (0)