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字符串替换示例
Apr 24 Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
Python回调函数用法实例详解
Jul 02 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
Python给图像添加噪声具体操作
Mar 03 Python
numpy数组之存取文件的实现示例
May 24 Python
Django的models中on_delete参数详解
Jul 16 Python
PYTHON实现SIGN签名的过程解析
Oct 28 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Python如何加载模型并查看网络
Jul 15 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
main.php
2006/12/09 PHP
smarty中post用法实例
2014/11/28 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
php 多文件上传的实现实例
2016/10/23 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
Python 支付整合开发包的实现
2019/01/23 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
2014年转正工作总结
2014/11/08 职场文书
员工2014年度工作总结
2014/12/09 职场文书
自荐信格式范文
2015/03/04 职场文书
青涩记忆观后感
2015/06/18 职场文书
劳动模范获奖感言
2015/07/31 职场文书
公司管理建议书
2015/09/14 职场文书