1.在python中,单例模式是很容易实现的,随便翻翻网上的相关教程,就能够找到很多答案。

比如这样:

class hello(object):

def __new__(cls, *args, **kwargs):

if not ‘_instance_one‘ in vars(cls):

cls._instance_one=object.__new__(cls)

return cls._instance_one

return cls._instance_one

def __init__(self):

print self

a=hello()

b=hello()

#************************** result *******************************

Process finished with exit code 0

可以看到,两个实例的内存地址相同,即表示二者是同一个实例 。

注意:如果我们重写__new__函数的话,需要继承object类。

2.需要注意到的是 上例中的self和cls._instance_one实际是同一个东西,我们可以简单做一个测试一下:

class hello(object):

def __new__(cls, *args, **kwargs):

if not ‘_instance_one‘ in vars(cls):

cls._instance_one=object.__new__(cls)

print cls._instance_one

return cls._instance_one

return cls._instance_one

def __init__(self):

print self

a=hello()

#************************************** result **********************************

Process finished with exit code 0

3.如果我们需要让单例模式只初始化一次的话,我们只需要加一个标志即可:

class hello(object):

def __new__(cls, *args, **kwargs):

if not ‘_instance_one‘ in vars(cls):

cls._instance_one=object.__new__(cls)

cls._instance_one._flag=1

return cls._instance_one

return cls._instance_one

def __init__(self):

if self._flag:

print self

self._flag=0

print "end"

a=hello()

b=hello()

#************************************result*********************************

end

end

4.注意到上例中的_flag写在类内,类外都可以,我们同样可以做一个实验:

class hello(object):

_flag=1

def __new__(cls, *args, **kwargs):

if not ‘_instance_one‘ in vars(cls):

cls._instance_one=object.__new__(cls)

return cls._instance_one

if not ‘_instance_two‘ in vars(cls):

cls._instance_two=object.__new__(cls)

return cls._instance_two

def __init__(self):

print self._flag

self._flag=0

print self._flag

a=hello()

b=hello()

#*************************************result ***************************************

1

0

1

0

Process finished with exit code 0

可以看到二者是等价的。

python3 单例模式_当python,单例模式,多例模式,一次初始化遇到一起相关推荐

  1. python最简单单例模式_5种Python单例模式的实现方式

    本文为大家分享了Python创建单例模式的5种常用方法,供大家参考,具体内容如下 所谓单例,是指一个类的实例从始至终只能被创建一次. 方法1: 如果想使得某个类从始至终最多只有一个实例,使用__new ...

  2. python语言的编程模式是什么意思_关于 Python 语言的编程模式,哪个说法正确?_学小易找答案...

    [简答题]给出异常处理的流程.要求包括else和finally,并说明else和finally的区别. (10.0分) [单选题]关于函数,以下选项中描述错误的是() (7.0分) [多选题]Pyth ...

  3. python装饰器实现单例模式_请教Python 使用装饰器实现单例模式的原理

    1 简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数. 比如,有一个函数: def func(): print 'func() run.' if '__main__' == __na ...

  4. 快速掌握python3语法_【Python】Python3基本语法入门学习

    0.Python概述 1.First Word Game 2.变量与字符串 3.improved game 4.Python数据类型 5.常用操作符 6.分支与循环 7.列表 8.元组 9.字符串内置 ...

  5. python2与python3共存_【python】--python2与python3 共存

    python3 和python 2 共存 1.安装基础的系统包 (因为我是在docker下启动的Linux, p_w_picpath中很多包没有装) yum install -y hostname   ...

  6. python2 python3 通信_基于Python的串口通信(2)

    2pyvisa 2.1安装pyvisa 2.1.1source安装 (1) 下载pyvisa ① 说明文档: ② 下载链接: (2) 解压 ① 命令解压 cd /xxx/xxx/pyvisa-mast ...

  7. python设计模式1-单例模式

    1. 单例模式(Singleton)介绍 UML类图 单例模式的优点 在内存中只有一个对象,节省内存空间. 避免频繁的创建销毁对象,可以提高性能. 避免对共享资源的多重占用. 可以全局访问. 适用场景 ...

  8. python decorator模块_在Python中实现decorator模式

    作为Philipp答案的补充:如果您不仅需要修饰,而且需要保留对象的类型,Python允许您在运行时为实例子类化:class foo(object): def f1(self): print &quo ...

  9. python策略模式_设计模式(python实现):策略模式

    策略模式简单说和小时候我们玩的玩具差不多,一堆零部件通过不同的拼凑构成几个不同的机器人. 1.举个栗子 我们买了一个机器人,同时这个机器人配了三把武器,三把武器可以替换使用 2.Show in Cod ...

最新文章

  1. 配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据
  2. 从谷歌离职回到西湖大学,只为让AI听懂你的悲伤!
  3. 新浪博客服务器维护,服务器安全维护
  4. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
  5. SDN中的Heavy-Hitter测量文献阅读
  6. java 的 AccessController.doPrivileged使用
  7. java中join的使用
  8. pycharm快捷键大全图_十个Pycharm使用小技巧——提升效率
  9. 服务器性能检测器,Linux服务器性能检测工具之 collectl
  10. 奥克兰大学 计算机硕士 GPA,申请奥克兰大学需要GPA成绩吗
  11. 物联网流量池_如何搭建物联网卡流量池系统
  12. 水色物语:清新水彩手绘插画技法
  13. 鼠标光标变成方块怎么办
  14. linux服务器开机提示f1,Dell的Linux服务器开机按F1解决方法
  15. 民宿OTA运营有哪些指标数据最重要
  16. 计算机网络--配置网络路由
  17. 钉钉windows端多开软件_Windows7系统便签怎么找?适合Windows系统的便签
  18. UI效果(6): EditText与软键盘
  19. 《庄子·外篇·知北游第二十二》
  20. Java通过codesoft调用zebra打印机

热门文章

  1. el-form 动态校验规则_动态多线程敏感信息泄露检测工具
  2. Learn OpenGL(二)——顶点输入(Vertex Input)
  3. java技术指标_使用 Micrometer 记录 Java 应用性能指标
  4. php redis zset 延迟队列_用PHP+Redis实现延迟任务,实现自动取消订单
  5. koa2 从入门到进阶之路 (五)
  6. mybatis(数据库增删改查)
  7. Java 疑问自问自答
  8. Bailian4120 硬币【0-1背包】
  9. JSK-118 输出格式练习【入门】
  10. 51Nod-1087 1 10 100 1000【模拟】