物件導向和異常

2021-08-20 11:04:14 字數 3354 閱讀 2186

物件導向技術簡介

類(class):用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。

方法:類中定義的函式。

類變數:類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。

資料成員:類變數在整個例項化的物件中是公用的。類變數定義在函式體之外。類變數通常不作為例項變數使用。

方法重寫:如果父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。

例項變數:定義在方法中的變數,只作用於當前例項的類。

繼承:即乙個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把乙個派生類的物件作為乙個基類物件對待。例如,有乙個這樣的設計:乙個dog型別的物件派生自animal類,這是模擬「是乙個(is-a)」關係(例圖,dog是乙個animal)。

例項化:建立乙個類的例項,類的具體物件

方法:類中定義的函式

物件:通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。        

類定義:

語法

class

classname

:<

statement-1

>..

.<

statement-n

>

類例項化後,可以使用其屬性,實際上,建立乙個類之後,可以通過類名訪問其屬性。

類物件

類物件支援兩種操作:屬性引用和例項化。

屬性引用使用和 python 中所有的屬性引用一樣的標準語法:obj.name。

類物件建立後,類命名空間中所有的命名都是有效屬性名。

很多類都傾向於將物件建立為有初始狀態的。因此類可能會定義乙個名為 __init__() 的特殊方法(構造方法),類定義了 __init__() 方法的話,類的例項化操作會自動呼叫 __init__() 方法,__init__() 方法可以有引數,引數通過 __init__() 傳遞到類的例項化操作上。

類的方法與普通的函式只有乙個特別的區別——它們必須有乙個額外的第乙個引數名稱, 按照慣例它的名稱是 self。

self 代表的是類的例項,代表當前物件的位址,而 self.class 則指向類。

self 不是 python 關鍵字,我們把他換成 runoob 也是可以正常執行的

在類地內部,使用 def 關鍵字來定義乙個方法,與一般函式定義不同,類方法必須包含引數 self, 且為第乙個引數,self 代表的是類的例項。

python 同樣支援類的繼承,如果一種語言不支援繼承,類就沒有什麼意義

需要注意圓括號中基類的順序,若是基類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋即方法在子類中未找到時,從左到右查詢基類中是否包含方法。

多繼承

需要注意圓括號中父類的順序,若是父類中有相同的方法名,而在子類使用時未指定,python從左至右搜尋即方法在子類中未找到時,從左到右查詢父類中是否包含方法

如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法

super()

函式是用於呼叫父類(超類)的乙個方法

__private_attrs:兩個下劃線開頭,宣告該屬性為私有,不能在類地外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs。

在類地內部,使用 def 關鍵字來定義乙個方法,與一般函式定義不同,類方法必須包含引數 self,且為第乙個引數,self 代表的是類的例項。

self 的名字並不是規定死的,也可以使用 this,但是最好還是按照約定是用 self。

__private_method:兩個下劃線開頭,宣告該方法為私有方法,只能在類的內部呼叫 ,不能在類地外部呼叫。self.__private_methods。

即便python程式的語法是正確的,在執行它的時候,也有可能發生錯誤。執行期檢測到的錯誤被稱為異常,

異常以不同的型別出現,這些型別都作為資訊的一部分列印出來: 例子中的型別有 zerodivisionerror,nameerror 和 typeerror。

錯誤資訊的前面部分顯示了異常發生的上下文,並以呼叫棧的形式顯示具體資訊

異常處理

首先,執行try子句(在關鍵字try和關鍵字except之間的語句)

如果沒有異常發生,忽略except子句,try子句執行後結束。

如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的型別和 except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的**。

如果乙個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。

乙個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有乙個分支會被執行。

處理程式將只針對對應的try子句中的異常進行處理,而不是其他的 try 的處理程式中的異常。

最後乙個except子句可以忽略異常的名稱,它將被當作萬用字元使用。你可以使用這種方法列印乙個錯誤資訊,然後再次把異常丟擲。

try except 語句還有乙個可選的else子句,如果使用這個子句,那麼必須放在所有的except子句之後。這個子句將在try子句沒有發生任何異常的時候執行。

使用 else 子句比把所有的語句都放在 try 子句裡面要好,這樣可以避免一些意想不到的、而except又沒有捕獲的異常。

異常處理並不僅僅處理那些直接發生在try子句中的異常,而且還能處理子句中呼叫的函式(甚至間接呼叫的函式)裡丟擲的異常。

丟擲異常

raise 唯一的乙個引數指定了要被丟擲的異常。它必須是乙個異常的例項或者是異常的類(也就是 exception 的子類)。

如果你只想知道這是否丟擲了乙個異常,並不想去處理它,那麼乙個簡單的 raise 語句就可以再次把它丟擲。

你可以通過建立乙個新的exception類來擁有自己的異常。異常應該繼承自 exception 類,或者直接繼承,或者間接繼承

當建立乙個模組有可能丟擲多種不同的異常時,一種通常的做法是為這個包建立乙個基礎異常類,然後基於這個基礎類為不同的錯誤情況建立不同的子類

try 語句還有另外乙個可選的子句,它定義了無論在任何情況下都會執行的清理行為

如果乙個異常在 try 子句裡(或者在 except 和 else 子句裡)被丟擲,而又沒有任何的 except 把它截住,那麼這個異常會在 finally 子句執行後再次被丟擲。

一些物件定義了標準的清理行為,無論系統是否成功的使用了它,一旦不需要它了,那麼這個標準的清理行為就會執行。

物件導向 異常

異常 exception 1.定義 就是導致程式終止的一種指令流,異常會使程式終止執行 2.throw和throws a throw用於丟擲一場物件 b throws用於標識函式暴露出的異常 區別 a throw用在函式上,後面跟異常類名 b throws用在函式內,後面跟異常物件 3.異常細節 a...

物件導向 異常finally

finally 塊 定義一定執行的 通常用於關閉資源。class fushuexception extends exception class demo class exceptiondemo5 catch fushuexception e finally system.out.println ov...

物件導向 異常 RuntimeException

exceptoin 中有乙個特殊的子類異常 runtimeexception 如果在函式內容丟擲該異常,函式上可以不用宣告,編譯一樣通過。如果在函式上宣告了該異常,呼叫者可以不用進行處理,編譯一樣通過。自定義異常時 如果該異常的發生無法在繼續進行運算,就讓自定義異常繼承runtimeexceptio...