在了解python的单例设计模式之前,我们需要先知道什么是设计模式:前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟解决方案。

  使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

单例设计模式

  • 目的:让类创建的对象,在系统中只有唯一的一个实例。每一次执行类名()返回的对象,内存地址是相同的。像音乐播放这样就是单例的。

  使用类名()创建对象时,python的解释器首先会调用__new__方法为对象分配空间。然后__init__初始化对象。所以在单例设计模式中想要返回固定的内存空间,就需要重写__new__方法。而想要重写__new__方法就需要知道其主要做了哪些事情:

  1. 在内存中为对象分配空间
  2. 返回对象的引用(内存地址)。python的解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法。
class Music_Player(object):def __new__(cls, *args, **kwargs):print("New Class, Return Address")return super().__new__(cls)def __init__(self):print("Music Init Done")
Music_Player()
>>> New Class, Return AddressMusic Init Done

  __new__方法的重写非常固定,一定要return super().__new__(cls)

单例设计模式思路分析

  所谓单例设计模式就是在使用这个类创建对象的时候,无论我们多少次创建对象的方法,得到的结果永远是内存中唯一的那个对象。

class Multic_Player(object):instance = Nonedef __new__(cls, *args, **kwargs):if cls.instance is None:cls.instance = super().__new__(cls)return cls.instance
Player1 = Multic_Player()
print(Player1)
Player2 = Multic_Player()
print(Player2)
>>> __main__.Multic_Player object at 0x7fe7944e00b8>__main__.Multic_Player object at 0x7fe7944e00b8>

  说明Player1Player2是相同的一个对象。内存中只有唯一一个对象。单上述代码的初始化方法__init__会被运行两次。要想初始化一次的话,可以定义一个类属性init_flag标记是否执行过初始化动作。

Python进阶(三)单例设计模式相关推荐

  1. python中的单例设计模式

    单例 -- 让 类 创建的对象,在系统中 只有 唯一的一个实例 定义一个 类属性,初始值是 None,用于记录 单例对象的引用 重写 __new__ 方法 如果 类属性 is None,调用父类方法分 ...

  2. Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式

    一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...

  3. python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件

    1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...

  4. Python单例设计模式

    (1)为什么使用设计模式? 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. (2)单例设计模式概念 让类创建的对象只有唯一的一个实例,即每次执行  类名() 返回的对象,内存地 ...

  5. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  6. Python(25)-单例设计模式

    单例设计模式 1.单例设计模式 2.__new__方法 3.初始动作只执行一次 本系列博文来自学习<Python基础视频教程>笔记整理,视屏教程连接地址:http://yun.itheim ...

  7. python单例设计模式(待补充)

    要点概论: 1. 理解单例设计模式 2. 单例模式中的懒汉式实例化 3. 模块级别的单例模式 4. Monostate单例模式 5. 单例和元类 6.单例模式Ⅰ 7. 单例模式Ⅱ 8. 单例模式的缺点 ...

  8. python:单例设计模式

    学习目标: python单例设计模式 学习内容: 1.设计模式:前人工作的总结和提炼,针对某一特定问题的成熟的解决方案 使用设计模式:可重用代码.让代码更容易被他人理解.保证代码可靠性 2.单例设计模 ...

  9. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

  10. 菜鸟之路-浅谈设计模式之单例设计模式

    单例设计模式 定义:确保一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例. 单例模式是一种经常使用的软件设计模式.在它的核心结构中仅仅包括一个被称为单例的特殊类. 通过单例模式能够保证系统 ...

最新文章

  1. 【中台】“中台”概念究竟是什么?制造业企业需要拥抱吗?
  2. k8s如何设置虚拟内存_绝地求生内存优化设置教程(建议收藏)
  3. REVERSE-PRACTICE-BUUCTF-30
  4. oracle用户密码已过期,oracle用户密码过期的处理方法
  5. 织梦cms生成首页html的php文件,织梦DedeCMS定时自动生成首页HTML的实现方法
  6. 使用innotop监测mysql
  7. uml点餐系统活动图_大学生网上订餐系统--UML建模
  8. 固件编辑器android,定制 Android 固件
  9. 1402. 星空之夜
  10. antd form validateFields的校验指定元素
  11. 看到别人比自己优秀,为何会难受?
  12. 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统
  13. 排序知识点总结及代码实现(C++)
  14. 2022/1/29周末培训小结(hgame)
  15. 网页集成大华摄像头以及回放功能2019.11.14
  16. #企业要求程序员统一电脑桌面,网友:桌面壁纸都不配拥有?
  17. 吃剩的苹果、长芽的土豆别扔!会有奇迹发生!
  18. 怎么让静态照片动起来,教程来咯!
  19. python数据分析网上培训
  20. 菲波那切数列 java_兔子的繁殖问题即菲波那切数列 java实现

热门文章

  1. ajax 传送很多html字符串到前台例子
  2. python3.8+mysql+pymysql安装
  3. Security+ 学习笔记40 网络安全设备
  4. 使用python连接eNSP中交换机并添加配置
  5. HCIE Security 2020.12.04面试战报
  6. Linux常用命令介绍(一)——文件与文件夹操作相关命令
  7. web之nginx相关配置二
  8. Linux下Python3对Docker进行基本的管理(包含显示端口,显示IP,一键启动,一键关闭)
  9. 在metasploitable里面搭建ZVulDrill
  10. NYOJ --21--三个水杯