python单例设计模式实现解析


Posted in Python onJanuary 07, 2020

这篇文章主要介绍了python单例设计模式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

所谓单例,就是让类创建对象的时候,在系统中只有唯一的一个实例。

(1)定义一个类属性,初始值是None,用于记录单例的引用。

(2)重写__new__方法。

(3)如果类属性是None,调用父类方法分配空间,并在属性中记录结果。

(4)返回属性中记录的对象引用。

class MusicPlayer(object):
  instance = None
  def __new__(cls, *args, **kwargs):
    if cls.instance is None:
      print("创建对象,分配空间")
      cls.instance = super().__new__(cls)
    return cls.instance

  def __init__(self):
    print("播放器初始化")
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)

输出:

python单例设计模式实现解析

我们发现,对象只被创建了一次,当要再创建一个对象时,实际上调用的是已经存在的同一个对象,均是唯一的地址, 但是,我们发现初始化操作却被执行了两次,这不符合我们的要求,解决办法如下:

(1)定义一个类属性init_flag标记是否执行过初始化操作,初始值为False。

(2)在__init__方法中判断是否进行过初始化,如果执行了,将init_flag置为True。

(3)再次调用__init__时,初始化就不会被执行了。

class MusicPlayer(object):
  instance = None
  init_flag = False
  def __new__(cls, *args, **kwargs):
    if cls.instance is None:
      print("创建对象,分配空间")
      cls.instance = super().__new__(cls)
    return cls.instance

  def __init__(self):
    if not MusicPlayer.init_flag:
      print("播放器初始化")
      MusicPlayer.init_flag = True
    else:
      return
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)

输出:

python单例设计模式实现解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的闭包实例详解
Aug 29 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python入门必须知道的11个知识点
Mar 21 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 #Python
linux环境下安装python虚拟环境及注意事项
Jan 07 #Python
Python包,__init__.py功能与用法分析
Jan 07 #Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 #Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 #Python
python 微信好友特征数据分析及可视化
Jan 07 #Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 #Python
You might like
第六章 php目录与文件操作
2011/12/30 PHP
PHP闭包实例解析
2014/09/08 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
node.js 如何监视文件变化
2020/09/01 Javascript
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
详解python多线程之间的同步(一)
2019/04/03 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
可靠的数据流传输TCP
2016/03/15 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
高三自我鉴定
2013/10/23 职场文书
运动会解说词100字
2014/01/31 职场文书
工程项目建议书范文
2014/03/12 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
小学课外活动总结
2014/07/09 职场文书
同意报考公务员证明
2015/06/17 职场文书