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实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
python解析基于xml格式的日志文件
Feb 25 Python
django中的HTML控件及参数传递方法
Mar 20 Python
利用python将json数据转换为csv格式的方法
Mar 22 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
使用Python来开发微信功能
Jun 13 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
python实现布隆过滤器及原理解析
Dec 08 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 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导出Word文档的原理和实例
2013/10/21 PHP
PHP的引用详解
2015/02/22 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
JS原型链怎么理解
2016/06/27 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
python中pass语句用法实例分析
2015/04/30 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
教师试用期自我鉴定
2014/02/12 职场文书
会计专业求职信范文
2015/03/19 职场文书
Python的这些库,你知道多少?
2021/06/09 Python