【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正在选课

posted @   W日常  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示