Python 单例设计模式用法实例分析

 更新时间:2019年09月23日 11:16:02   作者:houyanhua1  
这篇文章主要介绍了Python 单例设计模式用法,结合实例形式分析了Python单例模式的具体定义与使用操作技巧,需要的朋友可以参考下

本文实例讲述了Python 单例设计模式用法。分享给大家供大家参考,具体如下:

demo.py(单例):

class MusicPlayer(object):
  # 类属性 记录对象引用
  instance = None
  def __new__(cls, *args, **kwargs):
    # 1. 判断类属性是否是空对象
    if cls.instance is None:
      # 2. 调用父类的方法,为第一个对象分配空间
      cls.instance = super().__new__(cls)
    # 3. 返回类属性保存的对象引用
    return cls.instance
# 创建多个对象
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)

运行结果:

<__main__.MusicPlayer object at 0x019558B0>
<__main__.MusicPlayer object at 0x019558B0>

demo.py(__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):
    # 1. 判断是否执行过初始化动作
    if MusicPlayer.init_flag:
      return
    # 2. 如果没有执行过,再执行初始化动作
    print("初始化播放器")
    # 3. 修改类属性的标记
    MusicPlayer.init_flag = True
# 创建多个对象
player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)

运行结果:

初始化播放器
<__main__.MusicPlayer object at 0x01795B30>
<__main__.MusicPlayer object at 0x01795B30>

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python如何调用外部系统命令

    Python如何调用外部系统命令

    这篇文章主要介绍了Python如何调用外部系统命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python函数式编程之面向过程面向对象及函数式简析

    Python函数式编程之面向过程面向对象及函数式简析

    这一番我们要学习点有难度的了,因此将降低阅读与理解难度,尽量采用大白话为你铺垫,因为涉及的一些概念也是借鉴的其它编程语言的风格,而且实际落地中存在部分争议不过多学一点,总是没有坏处的
    2021-09-09
  • Python读取图片EXIF信息类库介绍和使用实例

    Python读取图片EXIF信息类库介绍和使用实例

    这篇文章主要介绍了Python读取图片EXIF信息类库介绍和使用实例,例如Python Imaging Library、EXIF.py等,需要的朋友可以参考下
    2014-07-07
  • python之js逆向功能演示详解

    python之js逆向功能演示详解

    这篇文章主要为大家介绍了python之js逆向功能演示详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • LyScript实现对内存堆栈扫描的方法详解

    LyScript实现对内存堆栈扫描的方法详解

    LyScript插件中提供了三种基本的堆栈操作方法,其中push_stack用于入栈,pop_stack用于出栈,peek_stac可用于检查指定堆栈位置处的内存参数。所以本文将利用这一特性实现对内存堆栈扫描,感兴趣的可以了解一下
    2022-08-08
  • 如何基于python3和Vue实现AES数据加密

    如何基于python3和Vue实现AES数据加密

    这篇文章主要介绍了如何基于python3和Vue实现AES数据加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python中input()的用法及扩展

    python中input()的用法及扩展

    这篇文章主要介绍了python中input()的用法及扩展,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python 字符串操作实现代码(截取/替换/查找/分割)

    Python 字符串操作实现代码(截取/替换/查找/分割)

    这篇文章主要介绍了Python 字符串截取/替换/查找/分割等实现方法,需要的朋友可以参考下
    2013-06-06
  • Python之多进程与多线程的使用

    Python之多进程与多线程的使用

    这篇文章主要介绍了Python之多进程与多线程的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 关于Python中Flask全局异常处理流程详解

    关于Python中Flask全局异常处理流程详解

    Flask是一个基于Python的Web框架,它提供了全局异常处理的机制来捕获和处理应用程序中的异常,本文将详细介绍Flask的全局异常处理,并提供相应的代码示例,需要的朋友可以参考下
    2023-06-06

最新评论