单例模式是软件开发中一种常用的设计模式,其目的是未来保证系统中一个类只有一个实例。即一个类只有一个对象实例。
使用python实现单例模式有4种方案:
1.使用import
首先编写一个singleton.py的文件
#singleton.py
class Singleton(object):
def My_singleton():
pass
mysingleton = Singleton.My_singleton()
使用时候直接import
from singleton import mysingleton
class myclass:
a=1
2.使用装饰器
这个问题在一次面试中被面试官问到了,问什么是装饰器,因为当时用flask比较多,答得就答到路由上了。顾名思义,装饰器就是起装饰作用的。设你新买的毛胚房子是你新写的一个类,如果你嫌弃新买的房子功能不齐全,你就会开始装潢你的房子,给它添加大量的家具与其他设备。而不是在买一个精装房子。装潢的过程就是在添加装饰的过程,在保证原有类不变的i情况下添加需要的功能。
那么如何用装饰器来做单例模式呢?
def singleton(cls ,*agrs , **kwargs):
instance = {}
def getinstance():
if cls not in instance:
instance[cls] = cls(*agrs , **kwargs)
return instance
return getinstance
@singleton
class MyClass():
a = 1
3.使用元类
元类是一个很高深的概念,利用元类来做单例模式是这样做的:
class Singleton(type):
_instance = None
def __call__(cls , *args , **kwargs):
if cls not in cls._instance:
cls._instance[cls] = super(Singleton,cls).__call__(*args , **kwargs)
return cls._instance[cls]
4 使用静态类__new__
class Singleton():
_instance = None
def __new__(cls , *args , **kwargs):
if cls not in cls._instance:
cls._instance = super(Singleton , cls).__new__(*args , **kwargs)
return cls._instance
本文在学习python的单例模式之后默写的代码,可能有误,参考的代码地址为