单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。 当类只有一个实例而且客户可以从一个众所周知的访问点访问它时 比如:数据库链接、Socket创建链接
在python开发和源码中关于单例模式有两种最常见的编写方式,分别是
基于__new__方式实现
import threading
import time
class Singleton:
instance = None
lock = threading.RLock()
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs):
if cls.instance:
return cls.instance
with cls.lock:
if cls.instance:
return cls.instance
time.sleep(0.1)
cls.instance = object.__new__(cls)
return cls.instance
obj1=Singleton('123')
obj2=Singleton('234')
print(obj2 is obj1)
基于模块导入的方式
class Singleton:
instance = None
def __init__(self, name):
self.name = '123'
single=Singleton('123')#常见实例
#调用实例,而非类
from start import single
s1=single
s2=single
print(s1 is s2)