Python 單例模式( new

2021-10-25 04:13:20 字數 1898 閱讀 9802

單例模式:簡單的理解就是乙個類只有乙個例項

參考:繼承自singleton的子類,並且該子類未重寫__new__方法,則該子類為但單例類

class

singleton

(object):

"""使用__new__實現單例"""

_instance =

none

def__new__

(cls,

*args,

**kwargs):if

not cls._instance:

cls._instance =

super

(singleton, cls)

.__new__(cls)

return cls._instance

class

myclass

(singleton)

:def

__init__

(self, val)

: self.val = val

def__call__

(self)

:print

(self.val)

if __name__ ==

'__main__'

: s1 = myclass(2)

s1() s2 = myclass(3)

s2()print(,

id(s1)

)print(,

id(s2)

)

單例類執行結果

__new__請不要這麼寫

:重寫__new__的單例類,請慎重使用__init__,我嘗試在子類中使用__init__來初始化子類,幾個小時也未能解決bug,如果有大神知道在怎麼寫__init__方法,還請不吝賜教,感激不盡

def

singleton

(cls,

*args,

**kwargs)

:"""單例模式"""

instances =

defget_instance

(*args,

**kwargs)

:# 第一次

if cls not

in instances:

instances[cls]

= cls(

*args,

**kwargs)

# 非第一次

return instances[cls]

return get_instance

@singleton

class

myclass

(object):

def__init__

(self, val)

: self.val = val

def__call__

(self)

:print

(self.val)

if __name__ ==

'__main__'

: s1 = myclass(2)

s1() s2 = myclass(3)

s2()print(,

id(s1)

)print(,

id(s2)

)

裝飾器單例模式結果

python單例模式和 new

在知道單例模式之前,就要先了解類的 new 方法 python類中 new 方法是最先執行的,因為 new 方法就是給python類提供乙個記憶體位址,當其他地方呼叫這個類後,就是在這個提供的記憶體位址進行執行,而每乙個記憶體位址同一時間內只能執行乙個專案。所以我們只需要在重寫一下 new 方法,在...

python 單例模式 使用 new

單例模式 即乙個類有且僅有乙個例項。那麼通過python怎麼實現乙個類只能有乙個例項呢。class earth 假如你是神,你可以創造地球 print 歡迎來到地球 生成乙個地球 a earth print id a 再生成乙個地球 b earth print id b 輸出 歡迎來到地球 5335...

單例模式 new

單例模式,使用 new new 是建構函式,init 是初始化方法,先呼叫了 new 返回了例項,init 給這個例項初始化繫結一些屬性。1 class singleton object 23 def new cls,args,kw 4if not hasattr cls,instance 5 cl...