python-day19(約束和異常處理)
阿新 • • 發佈:2018-11-12
一. 類的約束
1. 丟擲異常: NotImplementedError
2. 抽象類
from abc import ABCMeta, abstractmethod
class Base(metaclass = ABCMeta) : 抽象類
@abstractmethod
def 方法(self): pass
class Foo(Base):子類必須重寫父類中的抽象方法
def 方法(self):
pass
一個類包含類抽象方法. 這個類一定是抽象類
抽象類中可以有正常的方法
抽象類中如果有抽象方法. 這個類將不能建立物件
介面: 類中都是抽象方法
1 # class Base: 2 # def login(self): #強制子類做xxx事情 3 # raise NotImplementedError('子類沒有實現該方法') #報錯拋異常 4 # class A(Base): 5 # def login(self): 6 # print('1') 7 # class B(Base): 8 # def login(self): 9 # print('1')View Code10 # class C(Base): 11 # def denglu(self): 12 # print('1') 13 # # def login(self): #子類沒有設定login函式 繼承父類的login,父類的login報錯 14 # # print('1') 15 # def login(c): 16 # c.login() 17 # login(A()) 18 # login(B()) 19 # login(C()) 20 # ----------------------- 21 # from abc import ABCMeta,abstractmethod22 # class Base(metaclass=ABCMeta): #抽象類 23 # #抽象方法 24 # @abstractmethod # 25 # def login(self): #強制子類做xxx事 26 # pass 27 # def hehe(self): 28 # print('123') 29 # # b = Base() #報錯的原因是Base 是一個抽象類,含有抽象方法,不允許建立物件的 30 # 31 # # 一個類如果全部都是抽象方法, 這個類可以被稱為介面,用來約束子類和規範子類 32 # class Normal(Base): 33 # def login(self):#重寫了父類中的抽象方法 34 # print('123') 35 # n = Normal() 36 # n.login() 37 38 ''' 39 當我們需要對子類進行約束: 40 1.丟擲異常 NotImplementedError() 沒有實現 -> 約定俗成. 多觀察 41 2.寫抽象類 42 from abc import ABCMeta, abstractmethod 43 class Base(metaclass = ABCMeta): 44 @abstractmethod 45 def 方法(self): 46 pass 47 如果一個類中包含了抽象方法. 那麼這個類一定是一個抽象類 48 一個抽象類中可以包含正常的方法 49 50 介面: 介面中所有的方法都是抽象方法 51 52 子類必須重寫父類中的抽象方法. 否則子類也是一個抽象類 53 '''
二. 異常處理
try:
xxxx
except Error as e :
except....
else:
finally:
收尾
import traceback
try:
#嘗試執行的程式碼
except Exception as e:
#除了錯之後要做什麼
traceback.format_exc() #獲取堆疊資訊(錯誤資訊)
四. 日誌
logging
critical
error(最多)
wraning
info
debug