python3 单例模式_当python,单例模式,多例模式,一次初始化遇到一起
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,单例模式,多例模式,一次初始化遇到一起相关推荐
- python最简单单例模式_5种Python单例模式的实现方式
本文为大家分享了Python创建单例模式的5种常用方法,供大家参考,具体内容如下 所谓单例,是指一个类的实例从始至终只能被创建一次. 方法1: 如果想使得某个类从始至终最多只有一个实例,使用__new ...
- python语言的编程模式是什么意思_关于 Python 语言的编程模式,哪个说法正确?_学小易找答案...
[简答题]给出异常处理的流程.要求包括else和finally,并说明else和finally的区别. (10.0分) [单选题]关于函数,以下选项中描述错误的是() (7.0分) [多选题]Pyth ...
- python装饰器实现单例模式_请教Python 使用装饰器实现单例模式的原理
1 简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数. 比如,有一个函数: def func(): print 'func() run.' if '__main__' == __na ...
- 快速掌握python3语法_【Python】Python3基本语法入门学习
0.Python概述 1.First Word Game 2.变量与字符串 3.improved game 4.Python数据类型 5.常用操作符 6.分支与循环 7.列表 8.元组 9.字符串内置 ...
- python2与python3共存_【python】--python2与python3 共存
python3 和python 2 共存 1.安装基础的系统包 (因为我是在docker下启动的Linux, p_w_picpath中很多包没有装) yum install -y hostname ...
- python2 python3 通信_基于Python的串口通信(2)
2pyvisa 2.1安装pyvisa 2.1.1source安装 (1) 下载pyvisa ① 说明文档: ② 下载链接: (2) 解压 ① 命令解压 cd /xxx/xxx/pyvisa-mast ...
- python设计模式1-单例模式
1. 单例模式(Singleton)介绍 UML类图 单例模式的优点 在内存中只有一个对象,节省内存空间. 避免频繁的创建销毁对象,可以提高性能. 避免对共享资源的多重占用. 可以全局访问. 适用场景 ...
- python decorator模块_在Python中实现decorator模式
作为Philipp答案的补充:如果您不仅需要修饰,而且需要保留对象的类型,Python允许您在运行时为实例子类化:class foo(object): def f1(self): print &quo ...
- python策略模式_设计模式(python实现):策略模式
策略模式简单说和小时候我们玩的玩具差不多,一堆零部件通过不同的拼凑构成几个不同的机器人. 1.举个栗子 我们买了一个机器人,同时这个机器人配了三把武器,三把武器可以替换使用 2.Show in Cod ...
最新文章
- 配置导出MOSS2010列表数据到Excel并根据列表记录自动刷新数据
- 从谷歌离职回到西湖大学,只为让AI听懂你的悲伤!
- 新浪博客服务器维护,服务器安全维护
- python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
- SDN中的Heavy-Hitter测量文献阅读
- java 的 AccessController.doPrivileged使用
- java中join的使用
- pycharm快捷键大全图_十个Pycharm使用小技巧——提升效率
- 服务器性能检测器,Linux服务器性能检测工具之 collectl
- 奥克兰大学 计算机硕士 GPA,申请奥克兰大学需要GPA成绩吗
- 物联网流量池_如何搭建物联网卡流量池系统
- 水色物语:清新水彩手绘插画技法
- 鼠标光标变成方块怎么办
- linux服务器开机提示f1,Dell的Linux服务器开机按F1解决方法
- 民宿OTA运营有哪些指标数据最重要
- 计算机网络--配置网络路由
- 钉钉windows端多开软件_Windows7系统便签怎么找?适合Windows系统的便签
- UI效果(6): EditText与软键盘
- 《庄子·外篇·知北游第二十二》
- Java通过codesoft调用zebra打印机
热门文章
- el-form 动态校验规则_动态多线程敏感信息泄露检测工具
- Learn OpenGL(二)——顶点输入(Vertex Input)
- java技术指标_使用 Micrometer 记录 Java 应用性能指标
- php redis zset 延迟队列_用PHP+Redis实现延迟任务,实现自动取消订单
- koa2 从入门到进阶之路 (五)
- mybatis(数据库增删改查)
- Java 疑问自问自答
- Bailian4120 硬币【0-1背包】
- JSK-118 输出格式练习【入门】
- 51Nod-1087 1 10 100 1000【模拟】