【2022.8.1】设计模式详解和pickle模块的介绍
学习内容概括
- 设计模式
- pickle模块
学习内容详细
设计模块
-
1.设计模块什么意思?
- 在IT行业内 针对一些固定的问题设计出的固定的解决套路
-
2.设计模式的种类
- 一种有23种设计模式
-
3.设计模式的分类
- 创建类
- 结构类
- 行为类
-
4.学习掌握设计模式之单利模式
- 含义:类加括号调用多次只允许产生一个对象
-
正常情况:
class MyClass:
pass
obj1 = MyClass()
obj2 = MyClass()
obj3 = MyClass()
print(id(obj1), id(obj2), id(obj3)) # 28118704 28118464 28221480
# 正常情况下 类名只要加括号实例化产生对象 执行几次就会产生几个不同的对象
- 需求:类加括号调用多次只允许产生一个对象(单例模式)
# 可以使用元类干预对象的创建过程(__call__)
class MyMeTaClass(type):
instance = None # 设置局部变量接收
def __call__(self, *args, **kwargs):
if self.instance: # 判断instance是否为True
return self.instance # 为True直接返回
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)) # 35720688 35720688 35720688
# 如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用单例
pickle模块
-
什么是pickle模块?
- pickle模块和json模块很相似 都是用来做序列化和反序列化的
- 并且pickle模块支持python中所有的数据类型
-
pickle模块弊端:
- 不支持跨语言传输 只能在python中使用 兼容性不好
-
json模块和pickle模块的比较
# 需求:将对象保存到文件 并且将来取出之后还可以通过句点符随意调用
class MyClass:
def __init__(self, name):
self.name = name
def choice_course(self):
print('%s正在选课' % self.name)
obj = MyClass('jason')
====================常规方式:把对象写入文件内=================
# 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)) json模块也不行
=======================pickle模块=======================
import pickle
# 把对象保存到文件内
with open(r'a.txt','wb')as f:
pickle.dump(obj,f)
# 取出来后也可以直接通过句点符点出来
with open(r'a.txt','rb')as f:
data = pickle.load(f)
print(data) # <__mai__.MyClass object at 0x01E50DF0>
print(data.name) # jason
data.choice_course() # jason正在选课
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)