Python单例模式的两种实现方法


Posted in Python onAugust 14, 2017

Python单例模式的两种实现方法

方法一 

import threading 
 
class Singleton(object): 
  __instance = None 
 
  __lock = threading.Lock()  # used to synchronize code 
 
  def __init__(self): 
    "disable the __init__ method" 
 
  @staticmethod 
  def getInstance(): 
    if not Singleton.__instance: 
      Singleton.__lock.acquire() 
      if not Singleton.__instance: 
        Singleton.__instance = object.__new__(Singleton) 
        object.__init__(Singleton.__instance) 
      Singleton.__lock.release() 
    return Singleton.__instance

 1.禁用__init__方法,不能直接创建对象。

 2.__instance,单例对象私有化。

 3.@staticmethod,静态方法,通过类名直接调用。

 4.__lock,代码锁。

 5.继承object类,通过调用object的__new__方法创建单例对象,然后调用object的__init__方法完整初始化。 

6.双重检查加锁,既可实现线程安全,又使性能不受很大影响。 

方法二:使用decorator

#encoding=utf-8 
def singleton(cls): 
  instances = {} 
  def getInstance(): 
    if cls not in instances: 
      instances[cls] = cls() 
    return instances[cls] 
  return getInstance 
 
@singleton 
class SingletonClass: 
  pass 
 
if __name__ == '__main__': 
  s = SingletonClass() 
  s2 = SingletonClass() 
  print s 
  print s2

也应该加上线程安全  

附:性能没有方法一高

import threading 
 
class Sing(object): 
  def __init__(): 
    "disable the __init__ method" 
 
  __inst = None # make it so-called private 
 
  __lock = threading.Lock() # used to synchronize code 
 
  @staticmethod 
  def getInst(): 
    Sing.__lock.acquire() 
    if not Sing.__inst: 
      Sing.__inst = object.__new__(Sing) 
      object.__init__(Sing.__inst) 
    Sing.__lock.release() 
    return Sing.__inst

以上就是Python单例模式的实例详解,如有疑问请留言或者到本站的社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
如何用python整理附件
May 13 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python pandas读取csv后,获取列标签的方法
Nov 12 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
详解python函数的闭包问题(内部函数与外部函数详述)
May 17 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
Python tempfile模块生成临时文件和临时目录
Sep 30 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 #Python
python使用super()出现错误解决办法
Aug 14 #Python
Python SQLite3数据库日期与时间常见函数用法分析
Aug 14 #Python
python itchat实现微信自动回复的示例代码
Aug 14 #Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 #Python
django 创建过滤器的实例详解
Aug 14 #Python
django创建自定义模板处理器的实例详解
Aug 14 #Python
You might like
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
javascript中万恶的function实例分析
2011/05/25 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Django中的ajax请求
2018/10/19 Python
pandas 将索引值相加的方法
2018/11/15 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
python opencv读mp4视频的实例
2018/12/07 Python
Python中请不要再用re.compile了
2019/06/30 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
夏季药店促销方案
2014/08/22 职场文书
2014年保卫工作总结
2014/12/05 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
大国崛起观后感
2015/06/02 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
mysq启动失败问题及场景分析
2021/07/15 MySQL