今日内容概要
- 设计模式
- pickle模块
- 选课系统项目分析
- 选课系统目录搭建
设计模式
1.如何理解设计模式
在IT行业有很多前辈针对固定的一些问题设计出了固定的解决套路。
设计模式总共有23种。
设计模式的分类:创建型;结构型;行为型。
2.设计模式之单例模式
类加括号调用多次只允许产生一个对象。
(1)引出:正常情况下,类名只要加括号实例化产生对象,执行几次就会产生几个不同的对象。class MyClass: pass obj1 = MyClass() obj2 = MyClass() obj3 = MyClass() print(id(obj1),id(obj2),id(obj3)) ''' 2962171860192 2962171860752 2962171860640 '''
(2)如果产生的地方特别多,那么会浪费一定的内存空间,所以引出单例。
(3)单例方法之使用元类干预对象的创建过程
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('kevin') obj3 = Single('tony') print(id(obj1), id(obj2), id(obj3)) ''' 2578464315768 2578464315768 2578464315768 ''' print(obj1.name) # jason print(obj2.name) # jason print(obj3.name) # jason
(4)单例方法之定义一个装饰器实现
import settings def singleton(cls): #cls=Mysql _instance=cls(settings.HOST,settings.PORT) def wrapper(*args,**kwargs): if args or kwargs: obj=cls(*args,**kwargs) return obj return _instance return wrapper @singleton # Mysql=singleton(Mysql) class Mysql: def __init__(self,host,port): self.host=host self.port=port obj1=Mysql() obj2=Mysql() obj3=Mysql() print(obj1 is obj2 is obj3) #True obj4=Mysql('1.1.1.3',3307) obj5=Mysql('1.1.1.4',3308) print(obj3 is obj4) #False
pickle模块
1.什么是pickle模块
pickle模块使用的数据格式是python专用的,能够把Python对象直接保存到文件,而不须要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中。
2.pickle模块中常用函数
(1)pickle.dump(obj, file, [,protocol])
功能:接受一个文件句柄和一个数据对象作为參数,把数据对象obj以特定的格式保存到给定的文件file里。import pickle l1=[1,2,3,4,5] t1=(1,2,3,4,5) dic1={"k1":"v1","k2":"v2","k3":"v3"} #把列表l1序列化进一个文件f1中 with open("f1","wb") as f: pickle.dump(l1,f) pickle.dump(t1,f) pickle.dump(dic1,f) 序列化后在当前目录下生成一个f1文件,打开文件f1可以看到一堆乱码,如下所示: €]q (KKKKKe.€(KKKKKtq .€}q (X k1qX v1qX k2qX v2qX k3qX v3qu.
(2)pickle.load(file)
功能:将file中的对象序列化读出。import pickle #序列化到文件 obj = 123, "abcdedf", ["ac", 123], {"key": "value", "key1": "value1"} print(obj) #wb 读写到二进制文件 f = open("./a.txt",'wb') pickle.dump(obj,f) f.close() f = open("./a.txt",'rb') print(pickle.load(f)) f.close()
(3)pickle.dumps(obj[, protocol])
功能:将obj对象序列化为string形式,而不是存入文件中。import pickle ls = ['12', '34', '56'] # dumps 将数据通过特殊的形式转换为只有python语言认识的字符串 str = pickle.dumps(ls) print(str)
(4)pickle.loads(string)
功能:从string中读出序列化前的obj对象。import pickle # loads 将pickle数据转换为python的数据结构 ls = ['12', '34', '56'] str = pickle.dumps(ls) mes = pickle.loads(str) print(mes) ['aa', 'bb', 'cc']
选课系统项目分析
功能分析
(1)管理员功能(最核心)
1.注册
2.登录
3.创建讲师
4.创建学校
5.创建课程
(2)讲师功能
1.注册
2.登录
3.选择教授课程
4.查看教授课程
5.管理课程分数
(3)学生功能
1.注册
2.登录
3.选择学校
4.选择课程
5.查看分数
选课系统目录搭建
三层架构
(1)功能展示层
src.py
admin_view.py
teacher_view.py
student_view.py
(2)核心逻辑层
admin_interface.py
teacher_interface.py
student_interface.py
(3)数据处理层
db_hanlder.py
model.py