接口是一組功能的集合,可是接口中僅包含功能的名字,不包含具體的實現代碼
接口本質是一套協議標準,遵循這個標準的對象就能被調用python
爲了提升擴展性
例如電腦提早指定製定一套USB接口協議,只要你遵循該協議,你的設備就能夠被電腦使用,不須要關心究竟是鼠標仍是鍵盤
封裝描述了對數據/信息進行隱藏的觀念,它對數據屬性提供接口和訪問函數。經過任何客戶端直接對數據的訪問,無視接口,與封裝性都是背道而馳的,除非程序員容許這些操做。做爲實現的 一部分,客戶端根本就不須要知道在封裝以後,數據屬性是如何組織的。在Python中,全部的類屬性都是公開的,但名字可能被「混淆」了,以阻止未經受權的訪問,但僅此而已,再沒有其餘預防措施了。這就須要在設計時,對數據提供相應的接口,以避免客戶程序經過不規範的操做來存取封裝的數據屬性。
注意:封裝毫不是等於「把不想讓別人看到、之後可能修改的東西用private隱藏起來」
真正的封裝是,通過深刻的思考,作出良好的抽象,給出「完整且最小」的接口,並使得內部細節能夠對外透明
(注意:對外透明的意思是,外部調用者能夠順利的獲得本身想要的任何功能,徹底意識不到內部細節的存在)程序員
上代碼函數
class USB: def open(self): pass def close(self): pass def read(self): pass def write(self): pass class Mouse(USB): def open(self): print("鼠標開機.....") def close(self): print("鼠標關機了...") def read(self): print("獲取了光標位置....") def write(self): print("鼠標不支持寫入....") def pc(usb_device): usb_device.open() usb_device.read() usb_device.write() usb_device.close() m = Mouse() # 將鼠標傳給電腦 pc(m) class KeyBoard(USB): def open(self): print("鍵盤開機.....") def close(self): print("鍵盤關機了...") def read(self): print("獲取了按鍵字符....") def write(self): print("能夠寫入燈光顏色....") # 來了一個鍵盤對象 k = KeyBoard() pc(k)
在上述案例中,PC的代碼一旦完成,後期不管什麼樣的設備 只要遵循了USB接口協議,都可以被電腦所調用學習
接口主要是方便了對象的使用者,下降使用者的 學習難度,只要學習一套使用方法,就能夠以不變應萬變設計
問題:code
若是子類沒有按照你的協議來設計,也沒辦法限制他,將致使代碼沒法運行
就能夠用到定義抽象類的方法來實現對子類的方法的限定!!!!!!!對象
指的是包含抽象方法(沒有函數體的方法)的類接口
能夠限制子類必須類中定義的抽象方法it
代碼走你class
class Mouse: def open(self): print("鼠標開機.....") def close(self): print("鼠標關機了...") def read(self): print("獲取了光標位置....") def write(self): print("鼠標不支持寫入....") def pc(usb_device): usb_device.open() usb_device.read() usb_device.write() usb_device.close() m = Mouse() # 將鼠標傳給電腦 pc(m) class KeyBoard: def open(self): print("鍵盤開機.....") def close(self): print("鍵盤關機了...") def read(self): print("獲取了按鍵字符....") def write(self): print("能夠寫入燈光顏色....") # 來了一個鍵盤對象 k = KeyBoard() pc(k) class UDisk: def open(self): print("U盤啓動了...") def close(self): print("U盤關閉了...") def read(self): print("讀出數據") def write(self): print("寫入數據") u = UDisk() pc(u)
接口是一套協議規範,明確子類們應該具有哪些功能
抽象類是用於強制要求子類必須按照協議中規定的來實現
然而,python不推崇限制你的語法, 咱們能夠設計成鴨子類型,既讓多個不一樣類對象具有相同的屬性和方法
對於使用者而言,就能夠以不變應萬變,輕鬆的使用各類對象
python通常不會限制你必須怎麼寫,做爲一個優秀的程序員,就應該自覺遵照相關協議 因此有了鴨子類型這麼一說: 若是這個對象長得像鴨子,走路像鴨子,那就他是鴨子 你只要保證你的類按照相關的協議類編寫,也能夠達到提升擴展性的目的