手机
当前位置:查字典教程网 >脚本专栏 >python >Python单例模式实例分析
Python单例模式实例分析
摘要:本文实例讲述了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中的socket模块使用代理实例

python单例模式实例分析

Python程序设计入门(4)模块和包

Python yield 小结和实例

Python设计模式之观察者模式实例

Python写的贪吃蛇游戏例子

python中使用smtplib和email模块发送邮件实例

Python实现多线程下载文件的代码实例

Python 获取新浪微博的最新公共微博实例分享

Python 文件操作技巧(File operation) 实例代码分析

精品推荐
分类导航