__new__()方法:
__new__()
方法是由object
基類提供的內建方法,主要用來建立單例類;
物件建立時__new__()
方法首先為物件分配乙個記憶體空間(如果類中沒有顯式定義__new__()
方法,則類中的__new__()
方法繼承自object基類);
然後__new__()
方法返回物件的引用,__init__()
方法接收到返回的物件引用後才會開始初始化工作;
__new__()
方法重寫時一定要在繼承object
基類的__new__()
方法的基礎上進行擴充套件,即重寫的__new__()
方法模組需要包含return super().__init__(cls)
語句;
建立單例類**示例:
class
***(
object):
instance =
none
def__new__
(cls)
:if cls.instance is mone:
cls.instance =
super()
.__new__(cls)
return cls.instance
只執行一次初始化方法示例:
class
danli
(object):
instance =
none
init_*** =
false
def__new__
(cls)
:if cls.instance is
none
: cls.instance =
super()
.__new__(cls)
#__new__()方法是靜態方法
return cls.instance
def__init__
(self)
:# 只執行一次初始化方法
if danli.init_***:
return
print
('initializing...'
) danli.init_*** =
true
單例類
異常處理
簡單錯誤處理:
try
: 需要執行的**
except
:try中**出錯後執行,未出錯不執行
根據不同錯誤型別處理:
try
:pass
except errotypr1:
pass
except
(errotype2, errotype3)
:pass
except exception as result:
# 捕獲1,2,3沒捕獲的錯誤
print
(result)
else
: 沒有異常會執行該區塊**
finally
: 無論是否有異常都會執行該區塊**
異常傳遞
當異常發生時,異常會層層傳遞,最終傳遞到最後一層。因此,在編寫異常捕獲和處理時,可針對最後一層進行處理,不需要所可能存在異常的地方都進行處理。從而將注意力放在**邏輯的開發上,而不是將注意力分散在異常處理上。
def
demo1()
:return
int(
input
("輸入乙個整數: "))
defdemo2()
:return demo1(
)# 在主程式中進行異常處理,demo1()和demo2()函式中不進行異常處理
try:
print
(demo2())
except exception as result:
print
("異常型別: %s"
% result)
定製異常提示
建立乙個exception
異常物件
使用raise
關鍵字丟擲異常物件
示例:
# 輸入長度至少為8位的密碼,少於8位,丟擲異常
definput_pwd()
: pwd =
input
('input a password: ')if
len(pwd)
>=8:
return pwd
else
: ex = exception(
'the length of password must longer than 8 digits...'
)raise ex
# 在主程式中捕獲處理自定義異常
try:
input_pwd(
)except exception as result:
print
(result)
Python物件導向(四)
如果在子類中需要父類的構造方法就需要顯示的呼叫父類的構造方法,或者不重寫父類的構造方法。詳細說明可檢視 python 子類繼承父類建構函式說明。在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上 self 引數變數。區別在於類中呼叫普通函式時並不需要帶上 self 引數 python 總是首先查...
Python物件導向程式設計(四)
第40個 基本異常處理 1 while true 2 num1 input num1 3 num2 input num2 4try try塊裡放正常的 5 num1 int num1 6 num2 int num2 7 num3 num1 num2 8print num3 9 except exce...
Python物件導向學習筆記(四)
單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!只執行一次初始化工作 定義乙個類屬性init flag標記是否執行過初始化動作,初始值為false在 init 方法中,判斷init flag,如果...