`

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单例模式。分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被访问,但是...

    Python单例模式实例分析

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

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

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

    使用python写的单例模式日志记录器(设计模式之单例模式)

    使用python写的使用但里模式创建的一个日志记录器,具体相关知识可以参阅我的博客。

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

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 比如,某个服务器...

    python单例模式实例分析

    本文实例讲述了python单例模式。分享给大家供大家参考。具体分析如下: __new__()在__init__()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。单例模式是指创建唯一对象,...

    python单例模式实例解析

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

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

    主要介绍了Python单例模式的相关资料,这里提供了两种实现方法,及注意事项,需要的朋友可以参考下

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

    主要介绍了python单例模式的多种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    详解python单例模式与metaclass

    主要介绍了python单例模式与metaclass,文章介绍了单例模式的实现方式

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

    主要为大家介绍了5种Python单例模式的实现方式,所谓单例,是指一个类的实例从始至终只能被创建一次,对单例感兴趣的小伙伴们可以参考一下

    在Python中实现单例模式.docx

    在Python中实现单例模式.docx

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

    主要介绍了简单了解python单例模式的几种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    python单例设计模式实现解析

    主要介绍了python单例设计模式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    Python单例模式,用于Python GUI编程重要模式

Global site tag (gtag.js) - Google Analytics