基於人爲來約束: 即人爲主動拋出異常java
class BaseMessage(object): def send(self,x1): """ 必須繼承BaseMessage,而後其中必須編寫send方法。用於完成具體業務邏輯。 """ raise NotImplementedError(".send() 必須被重寫.") class Email(BaseMessage): def send(self,x1): """ 必須繼承BaseMessage,而後其中必須編寫send方法。用於完成具體業務邏輯。 """ print('發送郵件') obj = Email() obj.send(1)
當派生類中沒有約束的方法時,就會執行基類中的方法,從而觸發異常python
抽象類和抽象方法:ide
from abc import ABCMeta,abstractmethod class Base(metaclass=ABCMeta): # 抽象類 def f1(self): print(123) @abstractmethod def f2(self): # 抽象方法 pass class Foo(Base): def f2(self): print(666) obj = Foo() obj.f1()
抽象類能夠把子類中共有的方法寫入,提升複用性,可是這種方式在python中並不經常使用.spa
補充: 在java和c中存在接口,而python中不存在,因此用抽象類+抽象方法來僞造。code
接口是一種數據類型,主要用於約束派生類中必須實現制定的方法;即接口中的方法中不容許寫入代碼。blog
自定義異常:繼承
python的異常分爲兩種.
一、內建異常,就是python本身定義的異常。
二、不夠用,用戶自定義異常,
咱們能夠看到python的異常有個大基類。而後繼承的是Exception。因此咱們自定義類也必須繼承Exception。接口
class KeyError(Exception): pass class MyException(Exception): def __init__(self,code,msg): self.code = code self.msg = msg try: raise MyException(1000,'操做異常') except KeyError as obj: print(obj,1111) except MyException as obj: print(obj.code,obj.msg) except Exception as obj: print(obj,3333)