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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python中装饰器高级用法详解
Dec 25 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
python实现播放音频和录音功能示例代码
Dec 30 Python
python 实现多维数组转向量
Nov 30 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
利用Python pandas对Excel进行合并的方法示例
Nov 04 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
python爬虫工具例举说明
Nov 30 Python
Django rest framework如何自定义用户表
Jun 09 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 版获取重定向后的地址(代码)
2013/06/26 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
优秀毕业生的求职信
2014/07/21 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
环保守法证明
2015/06/24 职场文书
优秀员工演讲稿
2019/06/21 职场文书
python 多态 协议 鸭子类型详解
2021/11/27 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
nginx容器方式反向代理实战
2022/04/18 Servers