python3 魔術方法之單例模式(四)

2021-10-23 03:20:43 字數 2100 閱讀 9794

class

singleclass

(object):

__instance =

0def

__new__

(cls,

*args,

**kwargs):if

not cls.__instance:

cls.__instance =

object

.__new__(cls,

*args,

**kwargs)

return cls.__instance

return cls.__instance

a = singleclass(

)b = singleclass(

)print(id

(a))

# 38638368

print(id

(b))

# 38638368

print(id

(a)==

id(b)

)# true

此裝飾器可以將任意的類裝飾為單例

def

sing_fun

(fun)

: instance =

0def

inner_fun

(*args,

**kwargs)

:nonlocal instance

ifnot instance:

instance = fun(

*args,

**kwargs)

return instance

return instance

return inner_fun

@sing_fun

class

singleclass2()

:pass

a = singleclass2(

)b = singleclass2(

)print(id

(a))

# 35492696

print(id

(b))

# 35492696

print(id

(a)==

id(b)

)# true

執行過程:在直接執行python模組時,類首先被載入並執行(類中的類變數等會被載入執行),然後執行裝飾器函式,也就是執行singleclass2 =sing_fun(singleclass2)這句**,此時會將sing_fun()函式中的**執行,然後將返回值賦給singleclass2,此後若是初始化物件,則直接呼叫的是inner_fun()方法,這就是裝飾器的原理。

梳理一下裝飾器的原理:

1.被裝飾的函式會把函式名傳給裝飾器函式

2.裝飾器函式會把返回值賦給被裝飾的函式名

class

classdec()

: __instance =

0def

__init__

(self,cls)

: self.cls = cls

def__call__

(self,

*args,

**kwargs):if

not self.__instance:

classdec.__instance = self.cls(

*args,

**kwargs)

return classdec.__instance

return classdec.__instance

@classdec

class

singleclass2()

:pass

a = singleclass2(

)b = singleclass2(

)print(id

(a))

# 35492696

print(id

(b))

# 35492696

print(id

(a)==

id(b)

)# true

python3單例模式

單例模式是某個類在整個系統中只存在乙個例項的一種設計模式。使用單例模式的好處 單例模式不僅可以減少記憶體資源占用,而且因為只初始化一次,還可以加快執行效能。例如當程式通過乙個類來讀取配置資訊,而程式多個地方需要使用配置資訊,這時整個程式執行過程中只需乙個例項物件即可,可減少占用記憶體資源,同時還可以...

Python3 單例模式問題

單例模式,也叫單子模式,是一種常用的軟體設計模式,屬於建立型模式的一種。在應用這個模式時,單例物件的類必須保證只有乙個例項存在。許多時候整個系統只需要擁有乙個的全域性物件,這樣有利於我們協調系統整體的行為。比如在某個伺服器程式中,該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取...

Python3安裝Matplotlib模組

matplotlib 是 python 的繪相簿。它可與 numpy 一起使用,提供了一種有效的 matlab 開源替代方案。它也可以和圖形工具包一起使用,如 pyqt 和 wxpython。開啟cmd,輸入語句 python m pip install u pip setuptools pytho...