"""
单例模式 单利模式是一种设计模式, 应用该模式的类只会生成一个实例, 可以保证在程序的不同位置
都可以且仅可以取到同一个对象实例. 如果实例不存在, 会创建一个实例, 但是如果已经存在就会返回这个实例. 四种实现方法:
1.函数装饰器实现单例模式
2.类装饰器实现单例模式
3.__new__实现单例模式
4.metaclass实现单利模式
""" # 1.函数装饰器实现单例模式 def singleton(cls):
_instance = {} def get_instance():
# 实例不存在创建实例
if cls not in _instance:
_instance[cls] = cls() # 实例存在直接返回
return _instance[cls] return get_instance @singleton
class Cls(object):
def __init__(self):
pass cls1 = Cls()
cls2 = Cls()
print(id(cls1) == id(cls2)) # True # 2.类装饰器实现单例模式 class Singleton(object):
def __init__(self, cls):
self.cls = cls
self._instance = {} def __call__(self):
if self.cls not in self._instance:
self._instance[self.cls] = self.cls() return self._instance[self.cls] @Singleton
class Cls2(object):
def __init__(self):
pass cls3 = Cls2()
cls4 = Cls2()
print(id(cls3) == id(cls4)) # True # 3.__new__实现单例模式, 在创建实例的时候进行干预 class Singleton2(object):
_instance = None def __new__(cls, *args, **kwargs): # 实例不存在创建实例
if cls._instance is None:
cls._instance = super().__new__(cls, *args, **kwargs) # 实例存在直接返回
return cls._instance def __init__(self):
pass single1 = Singleton2()
single2 = Singleton2()
print(single1 == single2) # True # 4.metaclass实现单利模式, 元类metaclass可以通过方法__metaclass__创造类 class Singleton3(type):
_instance = {} def __call__(cls, *args, **kwargs): if cls not in cls._instance:
cls._instance[cls] = super().__call__(*args, **kwargs) return cls._instance[cls] class Cls3(metaclass=Singleton3):
pass cls5 = Cls3()
cls6 = Cls3()
print(id(cls5) == id(cls6)) # True

python---实现单例模式的更多相关文章

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

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

  2. Python 基于python实现单例模式

    基于python实现单例模式 by:授客 QQ:1033553122   概念 简单说,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也 ...

  3. python 以单例模式封装logging相关api实现日志打印类

    python 以单例模式封装logging相关api实现日志打印类   by:授客QQ:1033553122 测试环境: Python版本:Python 2.7   实现功能: 支持自由配置,如下lo ...

  4. python的单例模式:

    python的单例模式:http://funhacks.net/2017/01/17/singleton/ https://www.cnblogs.com/huchong/p/8244279.html ...

  5. 【Python】单例模式Singleton

    前两天一个面试被问到python中单例模式有几种实现方式,只答出了可以用元类实现...然后就想不起来了. 之后翻书,原来这些之前都见过的啊.... 1.手动实现真正创建实例的方法__new__()来实 ...

  6. 浅谈Python设计模式 - 单例模式

    本篇主要介绍一下关于Python的单例模式,即让一个类对象有且只有一个实例化对象. 一.使用__new__方法(基类) 要实现单例模式,即为了让一个类只能实例化一个实例,那么我们可以去想:既然限制创建 ...

  7. 【python】Python的单例模式

    原文:http://blog.csdn.net/ghostfromheaven/article/details/7671853 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某 ...

  8. python实现单例模式

    有这么一种场景,我们把数据封装到类体或类的某个方法里,然而我们new出这个类只是为了拿到这部分数据,那么当多次这样调用的时候,每次都来拿数据并放到内存中大大浪费了内存. 那我们就可以想,我们拿到一次数 ...

  9. Python 实现单例模式的一些思考

    一.问题:Python中如何实现单例模式 单例模式指一个类只能实例化一个对象. 二.解决方案: 所有资料参考于: http://python.jobbole.com/87294/ https://ww ...

  10. python之单例模式、栈、队列和有序字典

    一.单例模式 import time import threading class Singleton(object): lock = threading.RLock() # 定义一把锁 __inst ...

随机推荐

  1. Clickhouse 与 Kafka 的数据同步

    作者: LemonNan 原文地址: https://mp.weixin.qq.com/s/SUUHF9R_FKg-3vq7Q3cwBQ 注: 转载需注明作者及原文地址 介绍 Clickhouse 本 ...

  2. DataFrame计算corr()函数计算相关系数时,出现返回值为空或NaN的情况+np.log1p()

  3. Mock平台3-初识Antd React 开箱即用中台前端框架

    微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 内容提要 首先说下为啥这次测试开发系列教程前端选择Antd React,其实也是纠结对比过最终决定挑战一把,想法大概有几下几点: 笔者自己 ...

  4. ffmpeg修改视频文件的分辨率

    在本文中,我们将展示如何调整任何视频文件的大小. 这种方法是在Linux系统(几乎任何发行版)中调整视频文件大小的最佳方法之一,也是Windows和Mac用户的绝佳替代方案. 更改视频文件的分辨率将是 ...

  5. vue-cli项目创建步骤

    vue-cli项目创建步骤: 1.cmd打开命令行窗口 2.输入cnpm install vue-cli -g,然后回车等待(想在哪个目录建立vue项目就要在进入到对应目录再输入命令) 3.安装结束后 ...

  6. 微信网页JSDK接口-wx.chooseImage问题

    wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceTy ...

  7. 2022年官网下安装Studio 3T最全版与官网查阅方法(无需注册下载版)

    目录 一.环境 1.构建工具(参考工具部署方式) 2.保持启动 二.下载安装 1.百度搜索,或者访问官网:https://robomongo.org/,选择下载进入下载页. 2.进入下载页,选择如下下 ...

  8. 『现学现忘』Docker基础 — 27、Docker镜像的commit操作

    目录 1.commit命令作用 2.commit命令说明 3.示例演示 1.commit命令作用 在运行的容器中,并在镜像的基础上做了一些修改,我们希望保存起来,封装成一个新的镜像,方便我们以后使用, ...

  9. mac idea

    sout :按Tab或Enter都可以出现

  10. 面试问题之C++语言:从源文件到可执行文件过程

    1.预处理: 预处理过程主要处理那些源文件中的以"#"开始的预编译指令.包括:包含头文件.宏替换.条件编译而不进行语法检查. 2.编译: 编译过程就是把预处理的文件进行一系列的词法 ...