在每次使用類名()
建立物件時,python
的直譯器都會自動呼叫兩個方法:
在上一小節對__new__
方法改造之後,每次都會得到第一次被建立物件的引用.
但是:初始化方法還會被再次呼叫
需求 解決辦法
1.定義乙個類屬性init_flag
標記是否執行過初始化動作,初始值為false
2.在__init__
方法中,判斷init_flag
. 如果為false
就執行初始化動作
3.然後將init_flag
設定為true
4.這樣,再次自動呼叫__init__
方法時, 初始化動作就不會被再次執行了
class
musicplayer
: init_instance =
false
def__init__
(self)
:# 1 首先判斷真假
if musicplayer.init_instance:
# if 後面如果不跟其它,則預設為真
return
# 記得這個嗎?,在定義函式裡面使用return便表示不再執行下面的**
# 2 如果是假,就執行初始化動作,然後賦值給instance 真
print
("哈哈哈哈哈哈"
)# 3 如果是真,結束
musicplayer.init_instance =
true
a = musicplayer(
)b = musicplayer(
)c = musicplayer(
)
執行結果:
哈哈哈哈哈哈
正常情況下,建立乙個物件,便執行一次初始化動作,這裡建立了三個物件,但是卻只執行了一次,滿足條件.!
新人創作,若有問題,歡迎大佬斧正
C 中類初始值列表與類內初始化
類的建構函式的作用是對其成員進行初始化。而在建構函式中可以使用初始值列表為新建立的物件的成員進行賦值。在類的建構函式名之後緊跟著冒號,冒號後面是要初始化的成員名,之後是圓括號或者花括號括起來的初始值。這樣的結構就是建構函式的初始值列表,如下所示。class a int a int b 其中,自定義類...
單例初始化(MRC模式之autorelease)
最近在一專案中,在某個地方總是有記憶體閃退問題,經排查之後,終於找到問題所在。專案中崩潰的地方使用單例寫的 mrc模式 其中單例的初始化方法如下 getcalendarevents shareinstence return get 上述 中使用了autorelease,這在單例中會造成嚴重的記憶體洩...
單例模式 只執行一次初始化
new 方法是構建物件的方法,init 方法是初始化物件的方法。概念 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,單例模式是一種物件建立型模式。目的 單個程序中只存在乙個類的例項,從而實現資料共享,節省系統開銷,防止io阻塞 方法1 使用模組建立單例 檔案ca...