單例的執行與一次性初始化

2021-10-09 11:39:03 字數 1563 閱讀 2791

這節主要記錄單例設計的模式與單例之後執行一次的方法

單例:

目的是讓這個只有乙個例項化的物件

使用時需更改__new__方法,且需設定類屬性

就先舉個例子:上**

class player(object):

instance = none

def __new__(cls, *args, **kwargs):

if cls.instance is none:

cls.instance=super().__new__(cls)

return cls.instance

建立了乙個player類,其中需要設定乙個類屬性instance = none,之後更改new方法,因為new方法在使用時是為類的物件創造空間的,所以為了每次建立的物件都不變,也就是說位址不變,所以每次返回的位址應該相同。於此同時,在new方法當中應該保證不再建立新的位址,所以進行對instance的判斷,是否位址相同,且存在,並賦值給instance,最後進行返回

建立物件:

player1=player()

player2=player()

print(player1)

print(player2)

我的執行結果:

<__main__.player object at 0x000001ff3301fbe0>

<__main__.player object at 0x000001ff3301fbe0>

接下來,講單例只進行一次初始化

就剛那個類 我進行新增方法和變數,乙個init方法和init__flag變數

上**:

class player(object):

instance = none

init__flag = false

def __new__(cls, *args, **kwargs):

if cls.instance is none:

cls.instance=super().__new__(cls)

return cls.instance

def __init__(self):

if player.init__flag:

return

print("初始化成功")

player.init__flag=true

其中init__flag需要進行初始化,對其賦值為false,然後在init方法當中對init__flag進行判斷,如果為false則進行初始化,說明物件還沒有建立過,就進行下面的輸出語句與對init__flag賦值為true,就此也就保證了下次建立物件不再進行初始化

看執行結果:

初始化成功

<__main__.player object at 0x00000133398ffbe0>

<__main__.player object at 0x00000133398ffbe0>

單例模式 只執行一次初始化

new 方法是構建物件的方法,init 方法是初始化物件的方法。概念 確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,單例模式是一種物件建立型模式。目的 單個程序中只存在乙個類的例項,從而實現資料共享,節省系統開銷,防止io阻塞 方法1 使用模組建立單例 檔案ca...

一次性執行多條SQL語句

本地 windows 192.168.55.133 遠端1 192.168.55.9 遠端2 192.168.55.10 利用phpmyadmin來賂遠端sql server匯入大量資料時,會很慢,基於卡死。因為,它是通過web方式來上傳的,匯入之前它會首先將要匯入的.sql檔案先上傳到伺服器然後再...

shell一次性執行多條命令

1.每個命令之間用 隔開說明 各命令的執行給果,不會影響其它命令的執行。換句話說,各個命令都會執行,但不保證每個命令都執行成功。2.每個命令之間用 隔開 說明 若前面的命令執行成功,才會去執行後面的命令。這樣可以保證所有的命令執行完畢後,執行過程都是成功的。3.每個命令之間用 隔開 說明 是或的意思...