python 單例模式

可使用__new__來實現Singleton單例模式:
class Singleton(object):
    _singletons = {}
     def __new__(cls):
         if not cls._singletons.has_key(cls):            #若尚未任何實例
            cls._singletons[cls] = object.__new__(cls)  #生成一個實例
         return cls._singletons[cls]                             #返回這個實例

 

1 使用__new__方法

class Singleton(object):
    def __new__(cls, *args, **kw):
        if not hasattr(cls, '_instance'):
            orig = super(Singleton, cls)
            cls._instance = orig.__new__(cls, *args, **kw)
        return cls._instance
 
class MyClass(Singleton):
    a = 1

  

2 共享屬性

建立實例時把全部實例的__dict__指向同一個字典,這樣它們具備相同的屬性和方法.python

3 裝飾器版本

def singleton(cls, *args, **kw):
    instances = {}
    def getinstance():
        if cls not in instances:
            instances[cls] = cls(*args, **kw)
        return instances[cls]
    return getinstance
 
@singleton
class MyClass:
  ...

  

4 import方法

做爲python的模塊是自然的單例模式git

相關文章
相關標籤/搜索