Python单例模式实例分析
2015-01-16来源:易贤网

本文实例讲述了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,单例对象私有化。

静态方法,通过类名直接调用。

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程序设计有所帮助。

更多信息请查看IT技术专栏

2025公考·省考培训课程试听预约报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
推荐信息