单例模式:即是一个类只有一个实例,即使创建了多个最终的结果还是会指向第一个创建的这个。
应用场景:1.python web的登录注册的时候打开链接,单例模式可以使不管你打开多少次链接 最后弹出来的只有一个,避免重复出现链接造成内存不必要的损耗。
实现方式:
1.使用模块实现:
class page_inf(object):
def foo(self):
pass
information=page_inf()
#保存在page_inf.py中 然后
from page_inf import information
information.foo()
2.装饰器实现
def singleton(cls):
_instance={}
def _singleton(*args,**kargs):
if cls is not in _instance:
_instance[cls]=cls(*args,**kargs)
return _instance[cls]
return _singleton
@singleton
class A(object):
pass
a=A()
3.使用基类
class singleton(object):
def __new__(cls,*args,**kargs):
if not hasattr(cls,'_instance'):
cls._instance=super(singleton,cls).__new__(cls,*args,**kargs)
return cls._instance
class foo(singleton):
pass
foo1=foo()
4.使用元类
class singleton(type):
def __call__(cls,*args,**kargs):
if not in hasattr(cls,'_instance'):
cls._instance=super(singleton,cls).__call__(cls,*args,**kargs)
return cls._instance
class FOO(object):
__metaclass=singleton
foo=FOO()