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操作使用MySQL数据库的实例代码
May 25 Python
基于python 字符编码的理解
Sep 02 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
详解Python中string模块除去Str还剩下什么
Nov 30 Python
Pytorch1.5.1版本安装的方法步骤
Dec 31 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+SQLite存储方案
2010/09/04 PHP
php object转数组示例
2014/01/15 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
javascript常用方法总结
2015/05/14 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
Python中用max()方法求最大值的介绍
2015/05/15 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python查看微信撤回消息代码
2018/06/07 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
详解js文件通过python访问数据库方法
2019/03/03 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
人事主管的岗位职责
2013/11/16 职场文书
医学生职业规划范文
2014/01/05 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
收银员岗位职责
2015/02/03 职场文书
会计岗位职责范本
2015/04/02 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
HTML常用标签超详细整理
2022/03/19 HTML / CSS
如何基于python实现单目三维重建详解
2022/06/25 Python