python单例模式
2018-11-06 本文已影响0人
nice生活
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
__new__()在__init__()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。单例模式是指创建唯一对象,单例模式设计的类只能实例 一次
使用__new__方法
class Single:
def __new__(cls, *args, **kw):
if not hasattr(cls, "_instance"):
cls._instance = super().__new__(cls, *args, **kw)
return cls._instance
class MyClass(Single):
a = 1
print(MycClass() == MycClass())
#true
使用元类
class Single(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class MyClass(metaclass=Single):
a = 1
装饰器
def single(cls):
instances = {}
def getinstance(*args, **kw):
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return getinstance
@single
class MyClass:
...
使用模块
# single.py
class Single(object):
def foo(self):
pass
my_single = Single()
# to use
from single import my_single
my_single.foo()