Python學習總結(六)單例設計模式與異常處理

2021-09-11 06:33:55 字數 2313 閱讀 2573

概念:使所有乙個類建立的物件都只有乙個例項(也就是說這些物件的位址相同)

__new __ 方法作用

注意:__new __ 一定要返回物件的引用return super().__new __(cls)

與 __init __ 的區別

建立思想:

就像建立不帶頭結點的單鏈表,初始變數為空,如果是第一次新增(instance is none),則給建立乙個新的物件;否則不執行任何操作。

另外,由於 __init __ 函式每次都要執行,可以增加乙個類屬性flag,控制執行次數。

classa(

object):

instance =

none

init_flag =

false

# new 是靜態方法,即使沒有加上靜態方法的修飾器

def__new__

(cls,

*args,

**kwargs)

:if cls.instance is

none

: cls.instance =

super()

.__new__(cls)

# 如果為空,則新建立乙個物件

return cls.instance

def__init__

(self)

:# 使初始化方法只執行一次

if a.init_flag:

return

# do some thing

a.init_flag =

true

aa = a(

)bb = a(

)print(id

(aa)

)print(id

(bb)

)# 二者位址相同

print(id

(a))

# 類物件的位址與上面不同,因為上面建立的是例項物件

乙個簡單的版本:
try

:# 嘗試錯誤

pass

except

:# 丟擲異常

pass

更完整的版本:
try

:pass

except 錯誤型別1:

pass

except

(錯誤型別2

, 錯誤型別3

, 錯誤型別4):

pass

except exception as result:

print

("未知錯誤:%s"

% result)

else

:# 沒有錯誤才會執行的**

pass

finally

:# 無論是否有異常,都會執行的**

pass

直譯器丟擲的錯誤型別為報錯行的第乙個單詞,ex.:

recursionerror: maximum recursion depth exceeded

則錯誤型別為:recursionerror

技巧:可以利用異常的傳遞性,只在呼叫該函式的地方(例如主函式)做異常處理,這樣就可以不用在每個函式中都做異常處理。

主動丟擲異常(raise)

嘗試 try ——丟擲 raise——捕獲 except

1.建立乙個exception類的物件

2.使用關鍵字raise關鍵字丟擲異常物件

使用:

def

input_password()

: password =

input

("請輸入密碼:")if

len(password)

>=8:

return password

ex = exception(

"密碼長度不夠"

)# 建立exception物件,引號內字串為提示資訊

raise ex # 丟擲異常

try:

print

(input_password())

except exception as result:

print

(result)

學習python 單例設計模式

pyhton建立乙個物件的過程。單例設計模式的一種實現方式。當我們例項化乙個物件的時候,基本上可以分為如下步驟 呼叫 new cls 方法來建立乙個物件,然後找了乙個變數來接受 new 的返回值,這個返回值表示建立出來的物件的引用 呼叫 init 剛建立出來的物件的引用 方法,初始化成員變數。返回物...

(六)設計模式 單例模式

保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。注意 head first 中提到單例模式的時候,類建構函式為私有 private 通過靜態方法建立例項。剛解放時,國家需要人,人多力量大,於是乙個老百姓可能生了很多娃,於是人口迅速暴增。後來實行了計畫生育,規定了一對夫婦最多只能生育一胎,並把...

python物件導向學習筆記六 單例

設計模式 針對某一特定問題的套路,或者說是成熟的解決方案,前任工作的總結。類名 這位格式的方法為內建方法,new 為object基類提供的內建的靜態方法。new 方法的作用 在記憶體為物件分配空間 返回物件的引用。將引用傳給python直譯器後,會將引用作為物件的第乙個引數,傳給 init 方法,進...