Python-单例模式详解与实现

2023-11-11

目录

单例模式

__new__

装饰器

元类 

import


单例模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

应用:例如,数据库连接,可使用一个对象进行connect和close

__new__

class Singleton(object):
    def __new__(cls, *args, **kw):
        if not hasattr(cls, '_instance'):
            orig = super(Singleton, cls)
            cls._instance = orig.__new__(cls, *args, **kw)
        return cls._instance


class Test(Singleton):
    a = 1


test1 = Test()
test2 = Test()
print(id(test1), id(test2))

结果

1982801213000 1982801213000

装饰器

def singleton(cls):
    instance = None

    def inner(*arg, **kwargs):
        nonlocal instance
        if instance is None:
            instance = cls(*arg, **kwargs)
        return instance

    return inner


@singleton
class Test:
    a = 1


test1 = Test()
test2 = Test()
print(id(test1), id(test2))

网上很多教程instance 使用的字典,不清楚有什么好处

结果

1950255183048 1950255183048

元类 

class SingletonMeta(type):
    """自定义单例元类"""

    def __init__(cls, *args, **kwargs):
        cls.__instance = None
        super().__init__(*args, **kwargs)

    def __call__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = super().__call__(*args, **kwargs)
        return cls.__instance


class President(metaclass=SingletonMeta):
    pass

import

某个文件中实例化类,获得对象,其他文件导入对象即可。

更多python相关内容:【python总结】python学习框架梳理

本人b站账号:lady_killer9

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-单例模式详解与实现 的相关文章

随机推荐

  • C++ string的大小写转换

    include
  • 一款红队的工具仓库

    Gui tools Gui tools 一款集成的图形化渗透工具 包含大量WebShell管理 信息收集 漏洞扫描 综合漏洞利用 中间价漏洞利用工具 是红队成员快速 批量打点利器 护网攻防演练必备工具 红队火眼系统 火眼安全系统 一个面向渗
  • 数据库查询常用关键字JOIN与LEFT JOIN/UNION与UNION ALL/GROUP BY

    今天来回顾一下数据库查询中 常用的几个关键字 关注这些细节 对于我们 写出高效的SQL语句 还是有帮助的 1 JOIN 与 LEFT JOIN JOIN 等价于INNER JOIN 是强关联 JOIN只查询出左表能够在右表中匹配到记录的行
  • RHCA--260 故障排除1 slow ops, oldest one blocked for 1844 sec, mon.clienta has slow ops

    RHCA 260 第二题看似是送分题 只要保证ceph环境正常不用做任何事就可以得分 但始终会有这样或者那样的情况会造成集群状态异常 现象 root serverc ceph s cluster id ab26a238 1643 11ee
  • Linux安装kafka-manager

    相关链接https github com yahoo kafka manager releases kafka manager 2 0 0 2下载地址 百度云链接 https pan baidu com s 1XinGcwpXU9YBF46
  • 红帽8配置yum源

    使用传输工具 上传文件到 etc yum repos d 或 wget O etc yum repos d CentOS Base repo http mirrors aliyun com repo Centos 8 repo 注 不能下载
  • 我的va_start和va_end学习

    va start和va end定义 1 va start和va end是两个宏 2 在c语言中 当我们无法列出传递函数的所有形参类型和数目时 可以用省略号指定参数表 相关知识 1 va list ap 是定义一个字符指针ap 2 va st
  • 做对这 10 点,让你的 Redis 性能更上一层楼

    阅读本文大约需要 19 分钟 Hello 大家好 我是虎珀 今天跟大家分享 提升 Redis 性能的 10 个手段 Redis 作为内存数据库 虽说已经足够快了 但是 做对这 10 点 可以让你的 Redis 性能更上一层楼 注 本文源码基
  • 线程同步(一)

    上篇文章讲述了什么是线程 以及在Linux系统下线程的相关操作 线程 Linux系统实现 小梁今天敲代码了吗的博客 CSDN博客 本文将继续讲述线程的相关知识 线程同步 目录 1 线程同步的概念 2 线程不同步可能会发生什么 3 线程同步方
  • 计算机毕业设计选题推荐 40个高质量计算机毕设项目分享【源码+论文】(三)

    文章目录 前言 题目1 基于SSM的汽车租赁系统 br 题目2 基于SSM的在线药品超市购物系统 br 题目3 基于SSM的在线药品超市购物系统 br 题目4 基于SSM的疫情防控物业管理系统 br 题目5 基于SSM的在线音乐网站设计与实
  • 小程序打开另一个小程序、分享另一个小程序、分享后返回上一个小程序

    小程序是无法直接分享另一个小程序的链接给微信好友的 它只能分享自身的链接 但是我们可以通过另一种方法去实现这个功能 首先 我们在自己的小程序里面打开要分享的另一个小程序 然后 我们可以在打开的小程序里面分享它的链接给微信好友 最后 跳转回我
  • 关于烂代码的那些事(中)

    作者 秦迪 发布时间 2015 08 13 22 36 阅读 10350 次 推荐 32 原文链接 收藏 1 摘要 这是烂代码系列的第二篇 在文章中我会跟大家讨论一下如何尽可能高效和客观的评价代码的优劣 在发布了关于烂代码的那些事 上 之后
  • 【面试官】深入了解session和cookie的区别

    目录 一 什么是session和cookie 1 什么是session 2 cookie的组成 二 session和cookie工作流程 1 session的工作原理 2 cookie的工作流程 三 session和cookie的区别 一
  • Ubuntu下安装Anaconda

    使用python做文本处理最讨厌遇到的问题就是编码错误的问题 在linux环境下开发能较好的避开这个问题 Anaconda整合了常用的python科学计算包 避免再去安装各种包的麻烦 1 到官网http continuum io downl
  • oracle 存储过程中调用truncate命令。

    数据库版本 SQL gt select from v version BANNER Oracle Database 10g Enterprise Edition Release 10 1 0 2 0 ProdPL SQL Release 1
  • AirBuddy让您优雅的在 Mac 上使用 AirPods

    AirBuddy 是macOS系统上将iOS上的AirPods体验带到了Mac上 使用AirBuddy 您可以打开Mac旁边的AirPods外壳并立即查看状态 就像在iPhone或iPad上一样 Airbuddy for mac是一款功能高
  • 分享网页版免费聊天机器人

    GPT是一种基于深度学习技术的自然语言处理模型 全称为Generative Pre trained Transformer 它由团队开发 旨在利用神经网络生成人类能够理解的自然语言文本 分享网址 https shdily com 效果颜演示
  • vs2010 中使用 log4net

    vs2010 中使用 log4net 环境 vs2010 framework4 0 log4net 1 2 10 0 framework 2 0 参考 http www cnblogs com llhhll archive 2011 03
  • iOS端抓包工具-stream

    内容项 1 stream安装使用 2 stream功能解析 构建请求 host设置 抓包模式 stream安装使用 1 app store 搜索stream 点击下载 2 下载完成后进入app 点击 开始抓包 允许添加VPN配置 下载安装C
  • Python-单例模式详解与实现

    目录 单例模式 new 装饰器 元类 import 单例模式 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只有单个对象被创建 这个类提供了一种访问其唯一的对象