Python单例模式实例分析
Python单例模式实例分析
发布时间:2016-12-28 来源:查字典编辑
摘要:本文实例讲述了Python单例模式的使用方法。分享给大家供大家参考。具体如下:方法一复制代码代码如下:importthreadingclas...

本文实例讲述了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学习
脚本专栏子分类