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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
python中map、any、all函数用法分析
Apr 21 Python
CentOS6.5设置Django开发环境
Oct 13 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
深入理解Django的中间件middleware
Mar 14 Python
Python中的单继承与多继承实例分析
May 10 Python
python实现可视化动态CPU性能监控
Jun 21 Python
简单了解Django应用app及分布式路由
Jul 24 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
python topk()函数求最大和最小值实例
Apr 02 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 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实现与ASP Banner组件相似的类
2006/10/09 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
详解Vue.js在页面加载时执行某个方法
2018/11/20 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
Python函数中定义参数的四种方式
2014/11/30 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
python操作链表的示例代码
2020/09/27 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
大韩航空官方网站:Korean Air
2017/10/25 全球购物
JDO的含义
2012/11/17 面试题
责任胜于能力演讲稿
2014/05/20 职场文书
2014年党务工作总结
2014/11/25 职场文书
常住证明范本
2015/06/23 职场文书
运动会通讯稿200字
2015/07/20 职场文书
外出学习心得体会范文
2016/01/18 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
Python制作表白爱心合集
2022/01/22 Python