Python單例模式並且保證只被初始化一次

2021-09-25 22:11:07 字數 909 閱讀 4063

單例模式

假設我們有乙個日誌記錄器的,現在我們不希望在每乙個需要寫入日誌的地方生成乙個日誌記錄器,那麼我們的做法是:如果已經在程式中存在乙個日誌記錄器,那麼就獲取它;如果不存在,則新建立乙個日誌記錄器。

並且我們想保證__init__方法只執行一次:

class

singletonclass

: _instance =

none

# 這個屬性用來判斷程式全域性是否已經存在這個class的例項

_init_flag =

false

# 用來控制只initial一次

def__new__

(cls,

*args,

**kwargs)

:if cls._instance is

none

: cls._instance =

object

.__new__(cls)

return cls._instance

def__init__

(self)

:if singletonclass._init_flag:

return

print

('start to initialize the class obj'

) singletonclass._init_flag =

true

單例模式的缺點:這是獲得全域性狀態的一種很好的方式,但是全域性狀態又是我們需要避免的,因為專案中的一段**可能會修改這個全域性狀態,那麼在其他完全不相干的地方可能會造成其他結果。所以可以接受全域性狀態的地方就是日誌,快取,負載均衡,路由對映;因為單例例項的本身就是不可變的。

單例模式如何在多執行緒下保證單例

單例模式的實現方式 1 使用餓漢模式載入或使用static 塊 public class singletonhungry private singletonhungry public static singletonhungry getinstance public static void main...

python單例模式繼承 python單例模式

我們可以使用 new 這個特殊方法。該方法可以建立乙個其所在類的子類的物件。更可喜的是,我們的內建 object 基類實現了 new 方法,所以我們只需讓 sing 類繼承 object 類,就可以利用 object 的 new 方法來建立 sing 物件了。classsing object def...

單例模式 python

單例模式 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。實現 某個類只有乙個例項 途徑 1 讓乙個全域性變數使得乙個物件被訪問,但是它不能防止外部例項化多個物件。2 讓類自身負責儲存它的唯一例項。這個類可以保證沒有其他例項可以被建立。即單例模式。多執行緒時的單例模式 加鎖 雙重鎖定。餓漢式...