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中is和id的用法
Apr 03 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
Python实现的密码强度检测器示例
Aug 23 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
深入浅析Python传值与传址
Jul 10 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python开发游戏的前期准备
May 05 Python
python运用sklearn实现KNN分类算法
Oct 16 Python
python定时任务 sched模块用法实例
Nov 04 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
jupyter notebook快速入门及使用详解
Nov 13 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
PHP程序员必须知道的两种日志实例分析
2020/05/14 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
Python Web框架Tornado运行和部署
2020/10/19 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
WSDL的操作类型主要有几种
2013/07/19 面试题
高三体育教学反思
2014/01/29 职场文书
高考备战决心书
2014/03/11 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
英语邀请函范文
2015/02/02 职场文书
环境建议书
2015/02/04 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
雷锋电影观后感
2015/06/10 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫