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中的ConfigParser模块使用详解
May 04 Python
MySQL最常见的操作语句小结
May 07 Python
在Python的while循环中使用else以及循环嵌套的用法
Oct 14 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
python对配置文件.ini进行增删改查操作的方法示例
Jul 28 Python
详解Python import方法引入模块的实例
Aug 02 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
python统计函数库scipy.stats的用法解析
Feb 25 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
python爬不同图片分别保存在不同文件夹中的实现
Apr 02 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
php下正则来匹配dede模板标签的代码
2010/08/21 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
犀利的js 函数集合
2009/06/11 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python正则表达式match和search用法实例
2015/03/26 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
python实现媒体播放器功能
2018/02/11 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
详解Python正则表达式re模块
2019/03/19 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
Django中FilePathField字段的用法
2020/05/21 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
土木工程个人自荐信范文
2013/11/30 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
公司慰问信范文
2015/03/23 职场文书
公司地址变更通知
2015/04/25 职场文书
签证工作证明模板
2015/06/15 职场文书
Python中第三方库Faker的使用详解
2022/04/02 Python
Docker官方工具docker-registry案例演示
2022/04/13 Servers