• 单例——让类创建的对象,在系统中只有唯一的一个实例

    1. 定义一个 类属性,初始值是 None,用于记录 单例对象的引用

    2. 重写 __new__ 方法

    3. 如果 类属性 is None,调用父类方法分配空间,并在类属性中记录结果

    4. 返回 类属性 中记录的 对象引用

class MusicPlayer(object):
​# 定义类属性记录单例对象引用instance = None
​def __new__(cls, *args, **kwargs):
​# 1. 判断类属性是否已经被赋值if cls.instance is None:cls.instance = super().__new__(cls)
​# 2. 返回类属性的单例引用return cls.instance

只执行一次初始化工作

  • 在每次使用类名()创建对象时,Python的解释器都会自动调用两个方法:

    • __new__ 分配空间

    • __init__ 对象初始化

  • 在上一小节对 __new__ 方法改造之后,每次都会得到 第一次被创建对象的引用

  • 但是:初始化方法还会被再次调用

需求

  • 初始化动作 只被 执行一次

解决办法

  1. 定义一个类属性 init_flag 标记是否 执行过初始化动作,初始值为 False

  2. __init__ 方法中,判断 init_flag,如果为 False 就执行初始化动作

  3. 然后将 init_flag 设置为 True

  4. 这样,再次 自动 调用 __init__ 方法时,初始化动作就不会被再次执行

class MusicPlayer(object):
​# 记录第一个被创建对象的引用instance = None# 记录是否执行过初始化动作init_flag = False
​def __new__(cls, *args, **kwargs):
​# 1. 判断类属性是否是空对象if cls.instance is None:# 2. 调用父类的方法,为第一个对象分配空间cls.instance = super().__new__(cls)
​# 3. 返回类属性保存的对象引用return cls.instance
​def __init__(self):
​if not MusicPlayer.init_flag:print("初始化音乐播放器")
​MusicPlayer.init_flag = True
​
​
# 创建多个对象
player1 = MusicPlayer()
print(player1)
​
player2 = MusicPlayer()
print(player2)

Python的单例模式相关推荐

  1. Python设计模式-单例模式

    Python设计模式-单例模式 基于Python3.5.2,代码如下 #coding:utf-8 import threading import timeclass Singleton(object) ...

  2. python采用单例模式游戏_Python实现Singleton模式的方式详解

    前言 使用python实现设计模式中的单例模式.单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的.本文将简要介绍一下python中实现单例模式的几种常见方式和原理.一方面可以加深对 ...

  3. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  4. python实现单例模式的三种方式及相关知识解释

    python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...

  5. Python 实现单例模式

    Python 实现单例模式 单例模式是一种软件设计模式. 在面向对象编程中,通过单例模式只能创建一个类实例,也就是一个类永远只有一个实例对象. 在工作中,为了确保某一个类只会创建出一个实例,就需要使用 ...

  6. Python实现单例模式的几种方式

    认识单例模式 含义 单例模式是一种常用的软件设计模式,在应用这个模式时,类只会生成一个实例对象. 换句话说,单例模式确保某个类有且仅有一个实例,而且自行实例化并向整个系统提供这个实例,当我们在程序中的 ...

  7. Python 设计模式: 单例模式(singleton pattern)

    2019独角兽企业重金招聘Python工程师标准>>> 如果想在整个程序的运行过程中,某个类只有一个实例的话,可以通过单例模式来实现. 在 Python 中实现单例模式有很多种方式, ...

  8. Python创建单例模式的5种方法

    单例模式(Singleton Pattern)是一种常用的软件设计模式,是指一个类的实例从始至终只能被创建一次,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例:为了 ...

  9. python实现单例模式的三种方法

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 其目 ...

  10. python:单例模式--使用__new__(cls)实现

    单例模式:即一个类有且仅有一个实例. 那么通过python怎么实现一个类只能有一个实例呢. class Earth:"""假如你是神,你可以创造地球"" ...

最新文章

  1. python统计字母空格个数_python统计字母、空格、数字等字符个数的实例
  2. Nginx相关基础配置详解
  3. 微软发布新的Azure Pipelines功能和集成
  4. 【HDU 2028】Lowest Common Multiple Plus
  5. 使用python+opencv和pillow以及numpy对图像进行旋转,以及解决图像旋转过程中出现的黑边问题
  6. Python之迭代器和生成器
  7. 微众WeCross 跨链平台(2)网络拓扑
  8. 开源日志库Logger的使用秘籍
  9. e.preventdefault() 别滥用
  10. 据说,80%的人没有真正理解了Spring的依赖注入
  11. Dockerfile 学习:Docker Alpine PHP 安装扩展
  12. tarjan 算法模板
  13. 代码整洁之道之总结篇
  14. [EE261学习笔记] 4.常用的几个傅里叶变换相关公式
  15. 转鼓式精密过滤器滤网
  16. iphone 添加网易邮箱(126/163)踩坑(ios16)
  17. 92-Kafka详解
  18. Elastic:data_hot,data_warm,data_cold角色有什么用
  19. 对坐标的曲线积分求做功_曲线积分与曲面积分(前篇 曲线积分-坐标曲线积分-格林公式)...
  20. python 中角度与弧度间的转换

热门文章

  1. 公钥密码--Elgamal
  2. 计算机相关专业学习经验总结
  3. React Axios的定义,以及使用方式
  4. buu 权限获得第一步
  5. zookeeper for mac安装
  6. 计算机语言mod(m n),关于一段地址对齐的位运算代码的解释
  7. 【网络安全】什么是应急响应,应急响应中你到底该关注哪些指标?
  8. “高级”数据结构——树状数组
  9. 【PAT乙级】1087 有多少不同的值 (20 分)
  10. Keepalived运行命令