小白学python系列————【Day48】设计模式之单例以及pickle模块

本文详细介绍了Python中的设计模式,包括单例模式的实现方式,以及pickle模块的使用,如dump和load函数进行对象的序列化和反序列化。此外,还分析了一个选课系统的功能和目录结构,展示了三层架构的组织方式。
摘要由CSDN通过智能技术生成

今日内容概要

  • 设计模式
  • 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值