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 相关文章推荐
python生成随机验证码(中文验证码)示例
Apr 03 Python
python求crc32值的方法
Oct 05 Python
Python中字符串的修改及传参详解
Nov 30 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
Python set常用操作函数集锦
Nov 15 Python
Python算法之图的遍历
Nov 16 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 Python
Python 在局部变量域中执行代码
Aug 07 Python
使用gunicorn部署django项目的问题
Dec 30 Python
scrapy实践之翻页爬取的实现
Jan 05 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类
2006/11/27 PHP
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
php 向访客和爬虫显示不同的内容
2009/11/09 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
用console.table()调试javascript
2014/09/04 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
跟老齐学Python之Python文档
2014/10/10 Python
python通过索引遍历列表的方法
2015/05/04 Python
星球大战与Python之间的那些事
2016/01/07 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python绘制3D图形
2018/05/03 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python中作用域的深入讲解
2018/12/10 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
python实现静态web服务器
2019/09/03 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
vue常用指令代码实例总结
2020/03/16 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
职称评定自我鉴定
2014/03/18 职场文书
股权投资意向书
2014/04/01 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python