单例
2018-09-04 本文已影响0人
录崽
一、单例模式
new与init的区别:
__new:创建实例对象时调用的构造方法
init:初始化方法,用于设置实例的相关属性
python创建实例时,会先调用new构造方法,然后使用init进行实例初始化。
我们可以通过new来影响实例的创建,从而实现单例。
class A(object):
__instance = None
def __new__(cls,*args,**kwargs):
if not cls. __instance:
cls.__instance = super().__new__(cls,*args,**kwargs)
return cls.__instance
a = A()
b = A()
print(a == b)
print(id(a) == id(b))
上面代码中,声明了一个私有类变量__instance,当__instance不为None时,代表系统中已有实例,直接返回该实例,若__instance为None时,表示系统中还没有该类实例,则创建新实例并返回。