python 单例模式

mac2022-06-30  20

单例模式

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

#!/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._instclass A(Singleton):def __init__(self,s=None):super(A, self).__init__()self.s=sif __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

最新回复(0)