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使用MD5加密字符串示例
Aug 22 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
python3编码问题汇总
Sep 06 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
Python中偏函数用法示例
Jun 07 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
如何使用repr调试python程序
Feb 28 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Python实现微信表情包炸群功能
Jan 28 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
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP中使用匿名函数操作数据库的例子
2014/11/17 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
JS 常用校验函数
2009/03/26 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
Python中多线程的创建及基本调用方法
2016/07/08 Python
python实现抽奖小程序
2020/04/15 Python
numpy.where() 用法详解
2019/05/27 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
农村面貌改造提升实施方案
2014/03/18 职场文书
家长对学生的评语
2014/04/18 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
爱护环境建议书
2015/09/14 职场文书
班委竞选稿范文
2015/11/21 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL