Python单例模式实例分析

我做不到很坚强,但起码要让自己不再懦弱!人生最大的错误,是用健康换取身外之物,人生最大的悲哀,是用生命换取个人的烦恼,人生最大的浪费,是用生命解决自己制造的麻烦!

本文实例讲述了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单例模式实例分析请关注haodaima.com其它相关文章!

您可能有感兴趣的文章
Python自动化运维-使用Python脚本监控华为AR路由器关键路由变化

Python自动化运维-netmiko模块设备自动发现

Python自动化运维—netmiko模块连接并配置华为交换机

Python自动化运维-利用Python-netmiko模块备份设备配置

Python自动化运维-Paramiko模块和堡垒机实战