測開7 - Python(異常處理、面向對象)

① 異常處理數據庫

在寫代碼的過程當中一般會遇到一些錯誤致使程序報錯,而且大多數時候,本身也會知道哪裏最有可能出問題,這種狀況下,能夠對代碼增長異常處理。函數

 1 import traceback
 2 a = [1,2,3]
 3 try:
 4     print(a[5])
 5 except Exception as info:
 6     print(info)
 7 else:
 8     print('沒出錯')
 9 finally:
10     print('出不出錯都執行的')

上面須要說明的第一點:異常處理時也能夠把上面「Exception」替換爲具體的出錯類型,前提是你寫代碼的時候清楚哪一種報錯類型,若是不符合寫的類型,同樣仍是會遇到程序報錯運行失敗;spa

第二點,except 是出錯執行的部分,else 是沒出錯執行的部分,finally 是出不出錯都會執行的部分;code

第三,info 是出錯時系統給出的提示,上面的錯誤提示爲 ’list index out of range‘,可是上面並無用到導入的模塊,導入模塊能夠把程序報錯時的全部信息獲取到,具體到哪一行。以下:orm

1 import traceback
2 a = [1,2,3]
3 try:
4     print(a[5])
5 except Exception as a:    #若是a用不到,也能夠不寫 as a
6     print(traceback.format_exc())

 實際應用時,拿連接數據庫舉例,好比在連數據庫時加個 try,若是報錯那必定是數據庫鏈接問題;在發送請求的地方加個 try,若是報錯那必定是請求發送有問題,這樣就能夠避免寫的過程當中報錯了而後像個沒頭蒼蠅同樣處處試~~~對象

 

② 面向對象blog

幾個概念:繼承

:至關於一個模型,裏面集合了一些方法和屬性,類的組成:類名、屬性和方法索引

對象:根據模型具象化的東西接口

實例化:根據模型造對象的過程

【封裝】

封裝的主要特色以下所示。

  • 對象的行爲對於外部世界來講是不可見的,或者說對象的狀態信息是私密的。
  • 客戶端不能經過直接操做來改變對象的內部狀態。相反,客戶端須要經過發送消息來請求對象改變其內部狀態。對象能夠根據請求的類型,經過特定的成員函數(例如 get 和 set )改變他們的內部狀態,以做出相應的響應。
  • 在 Python 中,封裝(數據和方法的隱藏)的概念不是隱式的,由於它沒有提供封裝所需的關鍵字,諸如 public、private 和 protected(在諸如 C++或 Java 之類的語言中,都提供了這些關鍵字)。固然,若是在變量或函數名前面加上前綴__,就能夠將其訪問性變爲私有。 

【多態】

多態的主要特徵以下所示。

  • 多態有兩種類型
    • 對象根據輸入參數提供方法的不一樣實現。
    • 不一樣類型的對象可使用相同的接口。(下面的示例展現)
  • 對於 Python 來講,多態是該語言的內置功能。例如,操做符「+」能夠應用於兩個整數以進行加法運算,也能夠應用於字符串來連接他們。在下面的示例中,字符串、元組或列表均可以經過整數索引進行訪問。

它爲咱們展現了 Python 內置類型的多態:

1 a = 'John'
2 b = (1,2,3)
3 c = [3,4,5,6] 4 print(a[1],b[0],c[2])

【繼承】

如下幾點有助於更好地理解繼承過程。

  • 繼承表示一個類能夠繼承父類的(大部分)功能。
  • 繼承被描述爲一個重用基類中定義的功能並容許對原始軟件的實現進行獨立擴展的選項。
  • 繼承能夠利用不一樣類的對象之間的關係創建層次結構。與 Java 不一樣,Python 支持多重繼承(繼承多個基類)。

 如下簡單的定義一個類和一些說明。

 1 class Car(object):
 2     def __init__(self):
 3         print('--init--')
 4     def __del__(self):
 5         print('--del--')
 6     def move(self):
 7         print('--move--')
 8     def stop(self):
 9         print('--stop--')
10     def __new__(self):
11         print('--new--')
12         return object.__new__(cls) #cls 就是class

1. 關於繼承,公有屬性和方法能夠繼承,私有方法和屬性不能被繼承,可是能夠經過公有方法來修改。繼承以後,能夠經過打印'類名.mro()'或‘類名.__mro__’來查看繼承的順序。

2. __init__ 方法是一個初始化的方法,對象建立成功後自動執行。

3. __new__ 方法是建立對象的方法,實例化的過程就至關因而在執行基類的這個功能,以上的代碼中,若是不加 return object.__new__(cls), 那麼對象不會被建立,init 也不會執行,只會執行 new 中的方法,這是由於,第一,驗證了建立對象就是去執行new這個方法;第二,子類重寫了父類的方法,致使只執行子類的new方法,而子類重寫的方法中不包含建立對象,因此不會被建立。所以,加上 return 那一句,就能夠正常實例話,而且 init 也能夠被執行。

4. 調用被重寫的方法:類名.方法(self)

5. 靜態方法:@staticmethod,由於在程序開發過程當中,一般只會用類或者只用函數,因此有的函數定義了但與類沒什麼實際的關聯,這種就能夠放在類裏面定義爲一個靜態方法。

6. 類方法:@classmethod,能夠經過類型.類方法直接調用。

7. __del__ 方法在對象被釋放/被刪除時調用。

8. sys.getrefcount(對象) 能夠查看對象的引用個數,比實際多1

9. 面向對象的三個基本要素:封裝、繼承和多態

 

 

就先醬紫吧~😉

相關文章
相關標籤/搜索