博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之单例模式的实现和区别?
阅读量:5887 次
发布时间:2019-06-19

本文共 755 字,大约阅读时间需要 2 分钟。

__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

地址没变,属性也没变

 

转载于:https://www.cnblogs.com/shijia-listen/p/10540571.html

你可能感兴趣的文章
vs2008快捷键极其技巧 转载
查看>>
window 7上安装Visual Studio 2017失败的解决方法
查看>>
Python数值计算:一 使用Pylab绘图(2)
查看>>
k8s集群监控布署
查看>>
JAVA DataOutputStream和DataInputStream
查看>>
系统集成项目管理(二)
查看>>
6.2实现用户登录逻辑
查看>>
JavaScript 正整数正则表达式
查看>>
单元测试之Stub和Mock
查看>>
solr
查看>>
IOS7 viewDidLoad中调用 pushViewController 的问题
查看>>
oracle merge into 用法详解
查看>>
tf.concat&tf.gather&tf.gather_nd&tf.greater&tf.cast&tf.expand_dims&tf.squeeze
查看>>
VBA基础之Excel 工作表(Sheet)的操作(二)
查看>>
js 日期转换 strToDate
查看>>
空间索引格网大小无效
查看>>
C_数据结构_数组的修改和删除
查看>>
软件测试5gkd
查看>>
伪类与伪元素
查看>>
11.static关键字
查看>>