单例模式是一种软件设计模式,运行中只允许存在一个实例对象,举个例子
class T(object):
def __init__(self):
print self
a = T()
b = T()
执行代码,将输出下面信息
<__main__.T object at 0x10bdc4cd0>
<__main__.T object at 0x10bdd3150>
这是两个实例对象
如果是单例模式,修改代码
class T(object):
def __init__(self):
print self
def __new__(self,*args,**kw):
if "_instance" not in dir(self):
self._instance = object.__new__(self)
return self._instance
a = T()
b = T()
结果
<__main__.T object at 0x10bc81cd0>
<__main__.T object at 0x10bc81cd0>
a 和 b 的地址是一样的,说明只有一个实例对象,这样就简单实现了单例模式
如果是应用在多线程场景,则需要用到 threading.Lock()
import threading
class T(object):
def __init__(self):
print self
def __new__(self,*args,**kw):
if "_instance" not in dir(self):
with threading.Lock(): #上锁
if "_instance" not in dir(self):
self._instance = object.__new__(self)
return self._instance