单例模式:
应用该模式的一个类只有一个实例,即一个类只有一个对象实例。
class A(object):
def __new__(cls
):
print("执行了new方法")
return super().__new__
(cls
)
def __init__(self
):
print("执行了init方法")
if __name__
== '__main__':
a
= A
()
print(a
)
new 方法先于 init 方法执行,new方法传入的是一个类(cls),而 init 传入的是一个实例对象(self) __new__方法返回的值就是一个实例化对象 如果__new__方法返回None, 则__init__方法不会被执行,并且返回值只能调用父类中的__new__方法,而不能调用毫无关系的类的__new__方法)
new实现单例模式
class A(object):
def __new__(cls
):
print("开始执行new方法")
if not hasattr(cls
, "_ins"):
cls
._ins
= super().__new__
(cls
)
return cls
._ins
def __init__(self
):
print("开始执行init方法")
if __name__
== '__main__':
a
= A
()
a1
= A
()
if id(a
) == id(a1
):
print(f
"实例对象相同,id:{id(a)} - > id:{id(a1)}")