Python单例模式实例分析

748次阅读  |  发布于5年以前

本文实例讲述了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程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8