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 cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
Python中正则表达式详解
May 17 Python
Sublime开发python程序的示例代码
Jan 24 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
Flask实现跨域请求的处理方法
Sep 27 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
Python字节单位转换实例
Dec 05 Python
Django日志及中间件模块应用案例
Sep 10 Python
在Python中实现字典反转案例
Dec 05 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 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
Protoss兵种对照表
2020/03/14 星际争霸
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
Angular中的interceptors拦截器
2017/06/25 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
python实现自动重启本程序的方法
2015/07/09 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
一份软件工程师的面试试题
2016/02/01 面试题
什么时候需要进行强制类型转换
2016/09/03 面试题
市场营销专业毕业生求职信
2014/03/26 职场文书
医院领导班子整改方案
2014/10/01 职场文书
婚前协议书范本
2014/10/27 职场文书
考研复习计划
2015/01/19 职场文书
颐和园的导游词
2015/01/30 职场文书
餐馆开业致辞
2015/08/01 职场文书
放假通知怎么写
2015/08/18 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python