Python设计模式和pickle模块
2022/4/13 1:12:35
本文主要是介绍Python设计模式和pickle模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
设计模式
在IT行业中设计模式总共有23种,可以分为三大类,创建型,结构型,行为型。
设计模式之单例模式。
单例模式的意思是一个类只能产生一个对象,用于节省资源。
第一种(基于classmethod)
class Mysql(object): _instance = None def __init__(self, ip, port): self.ip = ip self.port = port @classmethod def singleton(cls): if not cls._instance: cls._instance = Mysql('127.0.0.1', 3306) return cls._instance obj1 = Mysql.singleton() obj2 = Mysql.singleton() print(obj1) print(obj2)
第二种(基于装饰器)
def singleton(cls): # 该对象在类Mysql被装饰上singleton的时候就已经实例化完毕 _instance = cls('127.0.0.1',3306) def inner(*args,**kwargs): # 判断是否传入参数,传入参数表示要实例化新的,不传表示用默认的 if args or kwargs: obj = cls(*args,**kwargs) return obj return _instance return inner @singleton class Mysql: def __init__(self,ip,port): self.ip = ip self.port = port obj1 = Mysql() obj2 = Mysql() obj3 = Mysql() print(obj1,obj2,obj3)
第三种(基于元类)
class MymetaClass(type): def __call__(self, *args, **kwargs): if not hasattr(self,'instance'): self.instance = super().__call__(*args,**kwargs) return self.instance class Mysql(metaclass=MymetaClass): def __init__(self,host,port): self.host = host self.port = port obj = Mysql('ajdak',213) obj1 = Mysql('asdasdas',134234) print(obj,obj1)
第四种(基于__new__)
class Mysql(object): _instance = None def __init__(self,name): self.name = name def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = object.__new__(cls) return cls._instance obj = Mysql('egon') obj1 = Mysql('jason') print(id(obj),id(obj1))
第五种(基于模块)
# 单独在一个py文件中定义一个类,并实例化一个对象,之后在其他文件导入这一对象,实现单例 class Singleton(object): def __init__(self,host,port): self.host = host self.port = port singleton = Singleton('127.0.0.1',3306)
pickle模块
将该模块的目的仅仅是为了在选课系统中使用,后期会学习ORM就不会用pickle了。并且该模块只支持python 兼容性很差!!!
将对象保存到文件`
import pickle class MyClass(object): school = 'school' def __init__(self, name): self.name = name def choose_course(self): print('%s正在选课'%self.name) obj = MyClass('jason') print(obj.school) obj.choose_course()
从文件中获取对象
with open(r'jason','rb') as f: data = pickle.load(f) print(data) print(data.name) print(data.school)
这篇关于Python设计模式和pickle模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门