Python单例模式实例分析

 更新时间:2015年01月14日 10:21:22   投稿:shichen2014  
这篇文章主要介绍了Python单例模式,以实例形式分析了Python单例模式的具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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 在函数上添加包装器

    这篇文章主要介绍了Python 如何在函数上添加包装器,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Python光学仿真wxpython透镜演示系统框架

    Python光学仿真wxpython透镜演示系统框架

    这篇文章主要为大家介绍了Python光学仿真UI界面的wxpython透镜演示系统框架基本讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • Python标准库datetime date模块的详细介绍

    Python标准库datetime date模块的详细介绍

    这篇文章主要介绍了Python标准库datetime date模块的详细介绍,datetime是Python提供的操作日期和时间的标准库,主要有datetime.date模块、datetime.time模块及datetime.datetime模块
    2022-07-07
  • Python标准库之urllib和urllib3的使用及说明

    Python标准库之urllib和urllib3的使用及说明

    这篇文章主要介绍了Python标准库之urllib和urllib3使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python获取任意xml节点值的方法

    Python获取任意xml节点值的方法

    这篇文章主要介绍了Python获取任意xml节点值的方法,涉及Python操作XML节点的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    这篇文章主要介绍了Python数据结构与算法之图的广度优先与深度优先搜索算法,结合实例形式分析了图的广度优先与深度优先搜索算法原理与相关实现技巧,需要的朋友可以参考下
    2017-12-12
  • python的dataframe和matrix的互换方法

    python的dataframe和matrix的互换方法

    下面小编就为大家分享一篇python的dataframe和matrix的互换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python统计cpu利用率的方法

    python统计cpu利用率的方法

    这篇文章主要介绍了python统计cpu利用率的方法,涉及Python中win32pdh模块的使用技巧,需要的朋友可以参考下
    2015-06-06
  • Windows安装Anaconda并且配置国内镜像的详细教程

    Windows安装Anaconda并且配置国内镜像的详细教程

    我们在学习 Python 的时候需要不同的 Python 版本,关系到电脑环境变量配置换来换去很是麻烦,所以这个时候我们需要一个虚拟的 Python 环境变量,这篇文章主要介绍了Windows安装Anaconda并且配置国内镜像教程,需要的朋友可以参考下
    2023-01-01
  • Django项目打包完整步骤以及可能出现的问题

    Django项目打包完整步骤以及可能出现的问题

    django项目的结构大体上都是类似,打包主要的功能就是把一些不需要部署的文件剔除,把需要部署的文件直接压缩打包,下面这篇文章主要给大家介绍了关于Django项目打包完整步骤以及可能出现问题的相关资料,需要的朋友可以参考下
    2023-06-06

最新评论