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基于windows平台锁定键盘输入的方法
Mar 05 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
django进阶之cookie和session的使用示例
Aug 17 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
Django异步任务之Celery的基本使用
Mar 23 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
Python进度条的使用
May 17 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jsonp原理及使用
2013/10/28 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
Vue项目数据动态过滤实践及实现思路
2018/09/11 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
Python列表推导式的使用方法
2013/11/21 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python画图学习入门教程
2016/07/01 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
床上用品全球在线购物:BeddingInn
2016/12/18 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
应届生煤化工求职信
2013/10/21 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
护士节活动总结
2014/08/29 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
周年庆典答谢词
2015/01/20 职场文书
培训班通知
2015/04/25 职场文书
被告答辩状范文
2015/05/22 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
python使用torch随机初始化参数
2022/03/22 Python
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android