单例模式:只有一个实例对象的类。
方法一:
通过__new__方法来实现:
class A(object):
__instance = None #创建一个值为None的私有属性
def __new__(cls, *args, **kwargs):
if not cls.__instance:
#首次创建实例时,将进入if,之后都将不进入,只能创建一个实例,实现单例
cls.__instance = super(A, cls).__new__(cls, *args, **kwargs)
return cls.__instance
方法二:
通过装饰器实现
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Foo(object):
pass
if __name__ == '__main__':
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2)