Python单例模式实例分析


Posted in Python onJanuary 14, 2015

本文实例讲述了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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
python中对list去重的多种方法
Sep 18 Python
python实现搜索本地文件信息写入文件的方法
Feb 22 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python中django学习心得
Dec 06 Python
Python + selenium自动化环境搭建的完整步骤
May 19 Python
基于Python实现扑克牌面试题
Dec 11 Python
python计算Content-MD5并获取文件的Content-MD5值方式
Apr 03 Python
python爬虫实例之获取动漫截图
May 31 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
Python离线安装openpyxl模块的步骤
Mar 30 Python
python文件读写操作与linux shell变量命令交互执行的方法
Jan 14 #Python
Python中使用Tkinter模块创建GUI程序实例
Jan 14 #Python
更改Python命令行交互提示符的方法
Jan 14 #Python
Python的迭代器和生成器使用实例
Jan 14 #Python
python实现带验证码网站的自动登陆实现代码
Jan 12 #Python
Python三元运算实现方法
Jan 12 #Python
Python中的True,False条件判断实例分析
Jan 12 #Python
You might like
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
php5与php7的区别点总结
2019/10/11 PHP
Mootools 1.2教程 类(一)
2009/09/15 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Python协程的用法和例子详解
2017/09/09 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
django富文本编辑器的实现示例
2019/04/10 Python
python hash每次调用结果不同的原因
2019/11/21 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
酒吧副总经理岗位职责
2013/12/10 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
实习公司领导推荐函
2014/05/21 职场文书
企业晚会策划方案
2014/05/29 职场文书
另类冲刺标语
2014/06/24 职场文书
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL