手机
当前位置:查字典教程网 >脚本专栏 >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中cPickle用法例子分享

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

Python中os和shutil模块实用方法集锦

python搭建简易服务器分析与实现

python定时器使用示例分享

Python 可爱的大小写

python算法学习之基数排序实例

Python中的CURL PycURL使用例子

python 字符串格式化代码

python中常用的各种数据库操作模块和连接实例

精品推荐
分类导航