1.定义
单例模式保证一个类只有一个实例,并提供一个访问它的全局访问点。
2.角色
使用__new__方法实现
class Singleton:
# 当类实例化时,首先会调用类的__new__方法进行初始化,产生一个新的对象
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
# 调用python的__new__方法进行初始化
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
class MyClass(Singleton):
def __init__(self, a):
self.a = a
if __name__ == '__main__':
ms1 = MyClass(1)
ms2 = MyClass(2)
print(ms1.a, ms2.a)
print(id(ms1), id(ms2))
"""
2 2
139843914173312 139843914173312
"""
3.优缺点
优点:
对唯一实例的受控访问(只有一个实例),单例相当于全局变量,但防止了命名空间被污染(变量命名不会有冲突) 。