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中用Decorator来简化元编程的教程
Apr 13 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
Pycharm调试程序技巧小结
Aug 08 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
js window.event对象详尽解析
2009/02/17 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
js中eval详解
2012/03/30 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
微信小程序的授权实现过程解析
2019/08/02 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python reduce 函数使用详解
2017/12/05 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Django REST framework 视图和路由详解
2019/07/19 Python
Django和Flask框架优缺点对比
2019/10/24 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
在网上学习全世界最好的课程:Coursera
2017/11/07 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
奥巴马竞选演讲稿
2014/05/15 职场文书
销售助理岗位职责
2015/02/11 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript