热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Python 中单例模式的实现方法

单例—让类创建的对象,在系统中只有唯一的一个实例;1)、定义一个类属性,初始值是none,用于记录单例对象的引用;2)、重写new方法;3)、如果类属性isnone,调

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

  • 1)、定义一个类属性,初始值是 none ,用于记录 单例对象的引用;
  • 2)、重写 new 方法;
  • 3)、如果 类属性 is none,调用父类方法分配空间,并在类属性中记录结果;
  • 4)、返回 类属性 中记录的 对象引用;

Python 中单例模式的实现方法

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

只执行一次初始化工作:在每次使用 类名() 创建对象时,python 的解释器都会自动调用两个方法:

  • 1)、new 分配空间;
  • 2)、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):            # 判断类属性是否是空对象          if cls.instance is none:                # 调用父类的方法,为第一个对象分配空间              cls.instance = super().__new__(cls)          # 返回类属性保存的对象引用          return cls.instance        def __init__(self):          # 判断是否执行过初始化动作          if musicplayer.init_flag:              return          # 如果没有执行过,在执行初始化动作          print("初始化播放器")          # 修改类属性的标记          musicplayer.init_flag = true    # 创建多个对象  play1 = musicplayer()  print(play1)    play2 = musicplayer()  print(play2)  

到此这篇关于python 中单例模式的实现方法的文章就介绍到这了,更多相关python 单例内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多python教程分享Python 中单例模式的实现方法,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • python教程分享python单例模式之selenium driver实现单例
    一、使用装饰器实现单例二、web自动化driver实现单例模式2.1编写单例模式的装饰器2.2driver使用装饰器,实现单例模式2.3获取driver的实例,就是单例了三、在自动 ... [详细]
  • python教程分享python人物视频背景替换实现虚拟空间穿梭
    引言近期网上这位卖蜂蜜的小伙鬼畜挺火的,大家质疑背景造假,这里我就带着大家实现“背景造假”(ps:原视频小伙是在真实场景拍摄的)准备工作在实现该功能之前,我 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • python教程分享cvtcolor函数的作用(cvtcolor函数出现未处理异常)
    在这篇文章中,我们将看到如何使用python中的opencv模块检测颜色,进入这个领域的第一步就是安装下面提到的模块。pipinstallopencv-pythonpipinsta ... [详细]
  • 写在前面最近在学习爬虫,在熟悉了Python语言和BeautifulSoup4后打算下个爬虫框架试试。没想到啊,这坑太深了。。。看了看相关介绍后选择了Scrapy框架,然后兴高采烈的 ... [详细]
  • 这篇文章给大家分享的是有关python3怎样中文转换编码的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。示例:处理 ... [详细]
  • 浅谈Python3中打开文件的方式(With open)
    浅谈Python3中打开文件的方式(With open)-目录0.背景知识1.常规方式:读取文件-----open()2.推荐方式:读取文件-----WithOpen1).读取方式 ... [详细]
author-avatar
海边的石雨价_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有