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中的身份运算符的使用方法
Oct 13 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
浅谈Python NLP入门教程
Dec 25 Python
对web.py设置favicon.ico的方法详解
Dec 04 Python
python读取xlsx的方法
Dec 25 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python用requests实现http请求代码实例
Oct 31 Python
Python序列类型的打包和解包实例
Dec 21 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
SpringBoot首页设置解析(推荐)
Feb 11 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 date函数参数详解
2006/11/27 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
PHP使用函数用法详解
2018/09/30 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
jQuery中append()方法用法实例
2015/01/08 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
vuejs如何配置less
2017/04/25 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
Python语言的变量认识及操作方法
2018/02/11 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
详解KMP算法以及python如何实现
2020/09/18 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
介绍一下MD5加密算法
2016/11/12 面试题
业务员岗位职责范本
2013/12/15 职场文书
优秀教师事迹简介
2014/02/02 职场文书
精彩广告词大全
2014/03/19 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
酒店厨房管理制度
2015/08/06 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书