__new__特殊方法实现

class Singleton:def __new__(cls, *args, **kwargs):if not hasattr(cls, '_instance'):cls._instance = super(Singleton, cls).__new__(cls)return cls._instancedef __init__(self, name):self.name = names1 = Singleton('first')
s2= Singleton('last')
print(s1 == s2)
>> True
print(s1.name)
>> last

tips: new__方法无法避免触发__init(),初始的成员变量会进行覆盖

装饰器实现

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''def singleton(cls):_instance = {}def inner(*args, **kwargs):if cls not in _instance:_instance[cls] = cls(*args, **kwargs)return _instance[cls]return inner@singleton
class Test:def __init__(self, name):self.name = namet1 = Test('first')
t2 = Test('last')
print(t1==t2)
>> True
print(t2.name)
>> first

类装饰器实现

class Singleton:def __init__(self, cls):self._cls = clsself._instance = {}def __call__(self, *args):if self._cls not in self._instance:self._instance[self._cls] = self._cls(*args)return self._instance[self._cls]@Singleton
class Cls2:def __init__(self, name):self.name = namecls1 = Cls2('first')
cls2 = Cls2('last')
print(id(cls1) == id(cls2))
>> True
print(cls1.name)
>> first

元类实现

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Singleton1(type):def __init__(self, *args, **kwargs):self.__instance = Nonesuper(Singleton1, self).__init__(*args, **kwargs)def __call__(self, *args, **kwargs):if self.__instance is None:self.__instance = super(Singleton1, self).__call__(*args, **kwargs)return self.__instanceclass C(metaclass=Singleton1):def __init__(self, name):self.name = namec1 = C('first')
c2 = C('last')
print(c1 == c2)
>> True
print(c2.name)
>> first

模块实现

Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。

#foo1.py
class Singleton(object):def foo(self):pass
singleton = Singleton()#foo.py
from foo1 import singleton

python单例模式的五种实现方式相关推荐

  1. Java 单例模式常见五种实现方式

    定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...

  2. Java23种设计模式之单例模式的五种实现方式、反射破解单例模式、不能破解枚举单例模式详解

    源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23 ...

  3. python 单例模式的四种创建方式

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

  4. Python单例模式的四种创建方式实例解析

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

  5. python创建单例模式_Python单例模式的四种创建方式实例解析

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

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

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

  7. 五种排序方式gif展示【python】

    简述 有五种排序方式. 文章目录 简述 排序 简单排序 冒泡排序 选择排序 归并排序 快速排序 排序 简单排序 import numpy as np import matplotlib.pyplot ...

  8. python最快的循环方法_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  9. 单例对象会被jvm的gc时回收吗_设计模式专题02-单例五种创建方式

    单例五种创建方式(下一篇:工厂模式) 什么是单例 保证一个类只有一个实例,并且提供一个访问该全局访问点 单例应用场景 1. Windows的Task Manager(任务管理器)就是很典型的单例模式( ...

最新文章

  1. Mysql事务处理问题
  2. 互联网1分钟 |1227
  3. 有用的Copy-On-write,写时复制
  4. 多态和重载的区别及用法
  5. 解决error: Microsoft Visual C++ 14.0 is required 问题
  6. xampp apache mysql配置_安装xampp(Apache+MySQL+PHP+PERL)
  7. css 倒三角_【推荐收藏】10 个最佳实践来改良你的 CSS
  8. mysql 慢查询日志记录
  9. github使用命令
  10. js调用局部打印功能并还原
  11. jquery视频教程(jquery视频教程全集)
  12. 《锋利的JQuery》notes
  13. iOS最新面试题(一)
  14. perfmon 端口修改_Windows操作统的性能监控工具――Perfmon.doc
  15. web前端课程设计 基于HTML+CSS+JavaScript汽车自驾游(10个页面)
  16. Kurento应用开发指南(以Kurento 5.0为模板) 之四:示例教程 一对一视频呼叫
  17. PT100热电阻及K型热电偶
  18. xbap中如何将3D动画发布到web浏览器
  19. Windows 美化
  20. 【计算几何】atan2函数

热门文章

  1. 快速排序算法C#实现
  2. 瑞星linux u盘引导盘杀毒教程,瑞星杀毒U盘怎样用U盘启动电脑
  3. 【MM模块】Subcontracting 委外加工(外包)—1
  4. 采购订单中的容差项目解释
  5. 自媒体时代的主流媒体不可替代
  6. 销售订单行项目的装运点字段确认规则
  7. SAP,IBM,AC实施之比较
  8. 那些你不知道的单词小秘密
  9. ubuntu 导入mysql_Ubuntu 下MySQL导入数据库.sql文件 命令
  10. php后台地址检测,[thinkphp] 隐藏后台地址