单例设计模式

  • 1.单例设计模式
  • 2.__new__方法
  • 3.初始动作只执行一次

本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html

1.单例设计模式

设计模式:不同的问题使用不同的解决套路。学习设计模式,在遇到已经有的问题时就直接使用套路解题就行了。

单例设计模式的应用场景:
音乐播放器、回收站、打印机 这些对象都只有一份,只有唯一的一个存在

单例设计模式:目的,让类创建的对象,在系统中只有唯一的一个实例,每次执行**类名()**返回对象,内存地址是相同的。

2.__new__方法

两个下划线开头,两个下划线结尾的方法(内置方法),是object类内置的一个 静态方法 。利用类创建对象时,由__new__方法给新建的对象分配空间,并将对象的引用返回给解释器。解释器进一步将这个引用返回给方法的初始化方法中的self 参数,并调用初始化方法。

重写new方法–实现单例的目的

class MusicPlayer(object):# 定义一个类属性,初始值为none 用于记录对象的引用# 第一次调用时赋值,后来调用就直接返回第一次调用的就行instance=Nonedef __new__(cls, *args, **kwargs):# 1.判断类属性是否是空对象if cls.instance is None:# 调用父类的方法,为第一个对象分配空间cls.instance=super().__new__(cls)# 返回类属性保存的对象引用return cls.instancepass
#创建多个对象
player1=MusicPlayer()
player2=MusicPlayer()print(player1)
print(player2)

输出:

<main.MusicPlayer object at 0x7f130b3be470>
<main.MusicPlayer object at 0x7f130b3be470>

3.初始动作只执行一次

在上面代码中,虽然每次使用类创建对象都指向相同的引用,但是初始化方法却是每次创建对象都会被调用,所以能做的就是让每次自动执行的初始化方法中个初始化动作只执行一次。

class MusicPlayer(object):# 定义一个类属性,初始值为none 用于记录对象的引用# 第一次调用时赋值,后来调用就直接返回第一次调用的就行instance=Noneint_flag=Falsedef __new__(cls, *args, **kwargs):# 1.判断类属性是否是空对象if cls.instance is None:# 调用父类的方法,为第一个对象分配空间cls.instance=super().__new__(cls)# 返回类属性保存的对象引用return cls.instancedef __init__(self):# 判断是否执行过初始化动作,if MusicPlayer.int_flag :return# 没有执行过,执行初始化动作                print("初始化方法执行啦")# 修改类属性标记MusicPlayer.int_flag=True#创建多个对象
player1=MusicPlayer()
player2=MusicPlayer()print(player1)
print(player2)

输出

初始化方法执行啦
<main.MusicPlayer object at 0x7f4ea08da438>
<main.MusicPlayer object at 0x7f4ea08da438>

Python(25)-单例设计模式相关推荐

  1. python:单例设计模式

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

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

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

  3. Python单例设计模式

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

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

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

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

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

  6. GOF设计模式之1:单例设计模式

    1.单例设计模式核心作用: 保证一个类只有一个实例,并且提供了访问该实例的全局访问点 2.常见应用场景: window的任务管理器 项目中读取配置文件一般也是一个单例模式 数据库连接池的设计也是采用单 ...

  7. JAVA设计模式之单例设计模式

    单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例.即一个类只有一个对象实例. 在JAVA中实现单例,必须了 ...

  8. Python 之 单例

    单例 目标 单例设计模式 new 方法 Python 中的单例 单例设计模式 设计模式 设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案 使用 ...

  9. 结合Spring源码学习单例设计模式

    之前我学习了 Spring Ioc,明白了 Spring IoC 容器是一个管理Bean的容器,在Spring的定义中,它要求所有的IoC容器都需要实现接口 BeanFactory ,它是一个顶级容器 ...

最新文章

  1. js获取 日期 星期 时间
  2. html 悬停显示标题,JS实现TITLE悬停长久显示效果完整示例
  3. Java —— Reflect反射机制
  4. 100台电脑无盘服务器配置,100台网吧无盘系统配三星840PRO方案解读
  5. 面试官:说说什么是 Java 内存模型(JMM)?
  6. 黑客概念与文化(课程笔记)
  7. 交管12123显示当前环境存在风险_手机刷入ROOT权限后交管12123等银行APP打不开怎么解决...
  8. C语言实现求斐波那契数列中的第n项
  9. excel 置信区间 计算_用Excel求置信区间.ppt
  10. 【技巧】SourceInsight如何设置为相对路径
  11. gii无法访问 yii2_yii2 学习历程——gii配置外部用户访问权限问题
  12. php 计算壬子,(14条消息)计算生辰八字五行属性的算法
  13. 网站流量统计(免费的)
  14. 【IOI2020国家集训队作业 Part 1】CF505E Mr. Kitayuta vs. Bamboos
  15. 《C Primer Plus》学习笔记—第9章
  16. 赛元科技EasyCodeCube的使用——Keil环境的配置
  17. 大连计算机office办公,大连办公office软件学习内容
  18. 运用BFS算法实现北京地铁路线换乘系统
  19. Urbannav数据集/novatel_data/inspvax订阅
  20. mac系统下使用flink消费docker运行的kafka

热门文章

  1. libxml2交叉编译问题及解决办法
  2. sip消息概念(一)
  3. Linux编程练习 --多线程1--线程创建
  4. 练字格子纸模板pdf_高考英语作文模板(总结八种常考题型,配合例文,纯手打的)...
  5. Mybatis占位符问题—ReflectionException: There is no getter for property named xxx
  6. java监听机制_详解java的事件监听机制和观察者设计模式
  7. python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多
  8. UI设计工具比较:Sketch、Adobe XD、墨刀、Mockplus、Axure RP
  9. 一步步编写操作系统 35 内存为何要分页
  10. android 预约挂号代码_告别排队!用Python定时自动挂号和快捷查询化验报告