python 单例模式

单例模式

顾名思义,只有一个实例,如果存在了就不创建了

#!/usr/bin/env python
# encoding: utf-8
class Singleton():
def __new__(cls,*args,**kwargs):
if not hasattr(cls,'_inst'):
cls._inst=super(Singleton,cls).__new__(cls,*args,**kwargs)
return cls._inst
class A(Singleton):
def __init__(self,s=None):
super(A, self).__init__()
self.s=s
if __name__ == '__main__':
a=A()
b=A()
print(a)
print(b)

输出结果可以看到实例a和b的实例地址一样

<__main__.A object at 0x02742810>
<__main__.A object at 0x02742810>

通过__new__方法,将类的实例在创建的时候绑定到类属性_inst上。如果cls._inst为None,说明类还未实例化,实例化并将实例绑定到cls._inst,以后每次实例化的时候都返回第一次实例化创建的实例。注意从Singleton派生子类的时候,不要重载new

原文地址:https://www.cnblogs.com/c-x-a/p/9176822.html