小猿圈alex讲了实现单例模式的好几种方法,小编把最经典,也是最经常用的两种实现单例模式的方法呈现给大家,如果想学其他的单例,可以去小猿圈看一下alex的课程,学习一下。
单例顾名思义就是这个类只能创建一个实例,那怎么创建呢?
1、__new__实现单例:
class Foo(object):
def __init__(self,name):
self.name=name
def __new__(cls,*args,**kwargs):
if not hasattr(cls,instance): #对象不存在instance属性
cls.instance=super().__new__(cls,*args,**kwargs)
return cls.instance #创建了一个实例,还没初始化对象
f=Foo('hello')
f1=Foo('hi')
f.name=hello f1.name=hi
id(f)==id(f1)
地址没变 属性变了
2、使用装饰器实现的单例:
class Demo(cls,*ags,**kwargs):
instance={}
def foo(*args,**kwargs):
if cls not in instance:
instance[cls]=cls(*args,**kwargs)#