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