在面試python工作的過程中,python的單例模式會經常被問到,而且在工作當中,也經常會使用到,所以統計了一下python實現單例模式的幾種方式。
實現python單例模式,共有四種模式
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__
指向同乙個字典,這樣它們具有相同的屬性和方法.
class borg(object):
_state = {}
def __new__(cls, *args, **kw):
ob = super(borg, cls).__new__(cls, *args, **kw)
ob.__dict__ = cls._state
return ob
class myclass2(borg):
a = 1
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的模組是天然的單例模式
class my_singleton(object):
def foo(self):
pass
my_singleton = my_singleton()
# to use
from mysingleton import my_singleton
my_singleton.foo()
以上就是四中實現python單例模式的四中方式,歡迎指正。 python單例模式繼承 python單例模式
我們可以使用 new 這個特殊方法。該方法可以建立乙個其所在類的子類的物件。更可喜的是,我們的內建 object 基類實現了 new 方法,所以我們只需讓 sing 類繼承 object 類,就可以利用 object 的 new 方法來建立 sing 物件了。classsing object def...
建立型模式 單例模式
餓漢式 package com.hfview.designmode.signle 1.餓漢式 就是在初始化成員變數的時候就獲取例項物件 2.public class signlemode private signlemode 懶漢式 package com.hfview.designmode.sig...
建立型模式 單例模式
概述 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。適用性 當類只能有乙個事例而且客戶可以從乙個眾所周知的訪問點訪問它時。當這個唯一事例應該是通過子類化可擴充套件的,並且客戶應該無需更改 就能使用乙個擴充套件的例項時。參與者 singleton 定義乙個instance操作,允許客戶訪問它...