所有实例中封装的数据相同时,下面有两个例子,通过第一个例子运行我们发现,我们这个创建的类是为了进行,多实例化也就是每个对象赋予不同属性值,这种就不符合单例模式,再来看一下第二个例子,明显属性一样实际上只需要创建一次就可以了,多次创建只会占用内存地址,这种就适合做单例模式
例一:
class Person(object):
def __init__(self,name,age):
self.name = name
self.age =age
def f1(self):
pass
def f2(self):
pass
xiaoming = Person("w",12)
print(xiaoming)
xiaohong = Person('s',13)
print(xiaohong)
<__main__.Person object at 0x000000946465AAC8>
<__main__.Person object at 0x000000946465A5C0>
例二:
class Person(object):
def __init__(self):
self.name = '123'
self.age = '456'
def f1(self):
pass
def f2(self):
pass
xiaoming = Person()
print(xiaoming)
xiaoming = Person()
print(xiaoming)
<__main__.Person object at 0x00000062C57EA390>
<__main__.Person object at 0x00000062C5963240>
如何优化列二做到单例模式:
class SqlPool:
__attr = None
@staticmethod
def connection():
if SqlPool.__attr:
return SqlPool.__attr
else :
#实例化
SqlPool.__attr =SqlPool()
return SqlPool.__attr
def __init__(self):
self.ip = '1.1.1'
def connections(self):
pass
i= 0
while i<5:
pool = SqlPool.connection()
i = 1+i
print(i)
print(pool)
设置一个类属性用来接受实例化init,让每一个对象最后返回同一个init实例化
总结:
1.单列 只有一个实例
2.静态方法+静态字段
3.所有的实例中封装的内容相同时,用单例模式