`

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 class SingletonLogger(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super...

    Python单例模式实例详解

    本文实例讲述了Python单例模式。分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被访问,但是...

    Python单例模式实例分析

    本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下: 方法一 复制代码 代码如下:import threading    class Singleton(object):   __instance = None     __lock = threading.Lock()...

    python单例模式原理与创建方法实例分析

    本文实例讲述了python单例模式原理与创建方法。分享给大家供大家参考,具体如下: 1. 单例是什么 举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统...

    Python单例模式的四种创建方式实例解析

    单例模式在 Python 中的应用场景通常包括管理全局状态、配置信息、数据库连接等。需要注意的是,虽然单例模式在某些情况下非常有用,但过度使用可能会导致设计复杂性增加,使得代码难以理解和测试。在使用单例时应...

    python单例模式的多种实现方法

    ### Python单例模式的多种实现方法 #### 概述 单例模式是一种常见的设计模式,其核心在于确保一个类仅有一个实例,并且该实例能够全局访问。这种模式在某些场景下非常有用,例如管理共享资源、配置管理或日志记录等...

    python单例模式实例分析

    **Python 单例模式详解** 单例模式是一种设计模式,它的目的是确保一个类在整个系统中只能有一个实例。这种模式在需要频繁创建和销毁对象,并且需要保持对象状态一致的场景中非常有用,例如资源管理器、配置管理器...

    python单例模式实例解析

    本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下 多次实例化的结果指向同一个实例 单例模式实现方式 方式一: import settings class MySQL: __instance = None def __init__(self, ip, ...

    Python单例模式的两种实现方法

    接下来,我们将详细介绍两种实现Python单例模式的方法。 **方法一:双重检查加锁** 这种方法的关键在于“双重检查”和“线程安全”。首先,我们定义一个类`Singleton`,并初始化一个类级别的变量`__instance`来...

    5种Python单例模式的实现方式

    ### 五种Python单例模式实现详解 #### 引言 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。本文将详细介绍五种不同的Python单例模式实现方法,每种方法都有其特点与适用场景...

    简单了解python单例模式的几种写法

    ### Python单例模式详解 #### 一、引言 单例模式是一种常用的软件设计模式,在很多编程语言中都有广泛的应用。在Python中实现单例模式不仅有助于提高代码的可读性和可维护性,还能有效控制资源的使用。本文将详细...

    详解python单例模式与metaclass

    ### 详解Python单例模式与Metaclass #### 单例模式概述 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在某些情况下非常有用,比如当应用程序需要控制资源访问时...

    python单例模式.zip_图形图像处理_Python_

    在“python单例模式.txt”文件中,可能详细阐述了如何在Python GUI编程中应用单例模式,包括如何创建单例,以及在图形图像处理中如何利用单例模式优化代码结构和性能。例如,可能涉及了如何使用`tkinter`或`PyQt`等...

    设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)

    以下是一个基本的Python单例模式实现: ```python class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__...

    在Python中实现单例模式.docx

    ### 在Python中实现单例模式 #### 概述 单例模式是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。在很多情况下,我们希望在整个应用程序中只存在一个特定类型的对象实例,例如配置管理...

    python单例设计模式实现解析

    需要注意的是,Python的单例模式与Java或C#等语言中的单例有所不同,因为Python的全局解释器锁(GIL)使得多线程环境下依然可以保证单例的线程安全性。然而,如果在多进程环境中,每个进程都有自己的内存空间,那么...

Global site tag (gtag.js) - Google Analytics