Python进阶(三)单例设计模式
在了解python
的单例设计模式之前,我们需要先知道什么是设计模式:前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟解决方案。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
单例设计模式
- 目的:让类创建的对象,在系统中只有唯一的一个实例。每一次执行
类名()
返回的对象,内存地址是相同的。像音乐播放这样就是单例的。
使用类名()
创建对象时,python
的解释器首先会调用__new__
方法为对象分配空间。然后__init__
初始化对象。所以在单例设计模式中想要返回固定的内存空间,就需要重写__new__
方法。而想要重写__new__
方法就需要知道其主要做了哪些事情:
- 在内存中为对象分配空间。
- 返回对象的引用(内存地址)。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>
说明Player1
和Player2
是相同的一个对象。内存中只有唯一一个对象。单上述代码的初始化方法__init__
会被运行两次。要想初始化一次的话,可以定义一个类属性init_flag
标记是否执行过初始化动作。
Python进阶(三)单例设计模式相关推荐
- python中的单例设计模式
单例 -- 让 类 创建的对象,在系统中 只有 唯一的一个实例 定义一个 类属性,初始值是 None,用于记录 单例对象的引用 重写 __new__ 方法 如果 类属性 is None,调用父类方法分 ...
- Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式
一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...
- python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件
1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...
- Python单例设计模式
(1)为什么使用设计模式? 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. (2)单例设计模式概念 让类创建的对象只有唯一的一个实例,即每次执行 类名() 返回的对象,内存地 ...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...
- Python(25)-单例设计模式
单例设计模式 1.单例设计模式 2.__new__方法 3.初始动作只执行一次 本系列博文来自学习<Python基础视频教程>笔记整理,视屏教程连接地址:http://yun.itheim ...
- python单例设计模式(待补充)
要点概论: 1. 理解单例设计模式 2. 单例模式中的懒汉式实例化 3. 模块级别的单例模式 4. Monostate单例模式 5. 单例和元类 6.单例模式Ⅰ 7. 单例模式Ⅱ 8. 单例模式的缺点 ...
- python:单例设计模式
学习目标: python单例设计模式 学习内容: 1.设计模式:前人工作的总结和提炼,针对某一特定问题的成熟的解决方案 使用设计模式:可重用代码.让代码更容易被他人理解.保证代码可靠性 2.单例设计模 ...
- 在Python中创建单例
这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...
- 菜鸟之路-浅谈设计模式之单例设计模式
单例设计模式 定义:确保一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例. 单例模式是一种经常使用的软件设计模式.在它的核心结构中仅仅包括一个被称为单例的特殊类. 通过单例模式能够保证系统 ...
最新文章
- 【中台】“中台”概念究竟是什么?制造业企业需要拥抱吗?
- k8s如何设置虚拟内存_绝地求生内存优化设置教程(建议收藏)
- REVERSE-PRACTICE-BUUCTF-30
- oracle用户密码已过期,oracle用户密码过期的处理方法
- 织梦cms生成首页html的php文件,织梦DedeCMS定时自动生成首页HTML的实现方法
- 使用innotop监测mysql
- uml点餐系统活动图_大学生网上订餐系统--UML建模
- 固件编辑器android,定制 Android 固件
- 1402. 星空之夜
- antd form validateFields的校验指定元素
- 看到别人比自己优秀,为何会难受?
- 【2016新年版】年度精品 XP,32/64位Win7,32/64位Win8,32/64位Win10系统
- 排序知识点总结及代码实现(C++)
- 2022/1/29周末培训小结(hgame)
- 网页集成大华摄像头以及回放功能2019.11.14
- #企业要求程序员统一电脑桌面,网友:桌面壁纸都不配拥有?
- 吃剩的苹果、长芽的土豆别扔!会有奇迹发生!
- 怎么让静态照片动起来,教程来咯!
- python数据分析网上培训
- 菲波那切数列 java_兔子的繁殖问题即菲波那切数列 java实现
热门文章
- ajax 传送很多html字符串到前台例子
- python3.8+mysql+pymysql安装
- Security+ 学习笔记40 网络安全设备
- 使用python连接eNSP中交换机并添加配置
- HCIE Security 2020.12.04面试战报
- Linux常用命令介绍(一)——文件与文件夹操作相关命令
- web之nginx相关配置二
- Linux下Python3对Docker进行基本的管理(包含显示端口,显示IP,一键启动,一键关闭)
- 在metasploitable里面搭建ZVulDrill
- NYOJ --21--三个水杯