单例模式:保证系统中一个类只有一个实例而且该实例利于外界访问。
下面是python实现单例模式的一种方式。
"""
这里用了重写new方法来实现单例模式。
在python中__new__方法是一个静态方法
它在对象被创建时调用,为对象分配空间,
并且返回一个地址传给__ init__方法
__new__方法的第一个参数是表示当前类。
"""
class Demo(object):
#1定义一个变量,用来记录__new__方法返回的第一个地址值
first_address = None
#(1)用一个变量记录__init__内容是否已经执行过
label = False
#2重写__new__方法
def __new__(cls,*args,**kwargs):
#判断如果是第一次就给对象分配一个空间,并且记录它的引用
#如果不是第一次,就返回第一次记录的引用
if cls.first_address is None:
cls.first_address = super().__new__(cls)
return cls.first_address
#(2)__init__方法的写法
def __init__(self,attribute_value):
#判断是否初始化了实例属性,如果没有就初始化实例属性,否则直接结束方法
if Demo.label:
return
self.attribute = attribute_value
Demo.label = True
def test(self):
print(self.attribute)
a1 = Demo("a1")
print(a1)
a2 = Demo("a2")
print(a2)
a1.test()
a2.test()