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 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
用python制作游戏外挂
Jan 04 Python
Python WSGI的深入理解
Aug 01 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
elasticsearch python 查询的两种方法
Aug 04 Python
Python 3 判断2个字典相同
Aug 06 Python
python实现的config文件读写功能示例
Sep 24 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
linux 下selenium chrome使用详解
Apr 02 Python
Python实现快速大文件比较代码解析
Sep 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
php经典趣味算法实例代码
2020/01/21 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python如何输出反斜杠
2020/06/18 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
手机被没收检讨书
2014/02/22 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
文明演讲稿范文
2014/05/12 职场文书
教研处工作方案
2014/05/26 职场文书
单位考核鉴定意见
2015/06/05 职场文书
单独二胎证明
2015/06/24 职场文书
运动会主持词大全
2015/07/02 职场文书
公司人事管理制度
2015/08/05 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
微信早安问候语
2015/11/10 职场文书