python之单例模式的实现和区别?

__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)

地址没变 属性变了

使用装饰器实现的单例:

class Demo(cls,*ags,**kwargs):

  instance={}

  def foo(*args,**kwargs):

    if cls not in instance:

      instance[cls]=cls(*args,**kwargs)#具体的实例(已经初始化好的实例对象)

    return instance[cls]

    return foo

@Demo

class School(object):

  def __init__(self,name)

  self.name=name

s=School('hafo')

s1=School('qinghua')

s.name=hafo s1.name=hafo s1==s

地址没变,属性也没变

 

猜你喜欢

转载自www.cnblogs.com/shijia-listen/p/10540571.html
今日推荐