顾名思义,只有一个实例,如果存在了就不创建了
#!/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