python面向對象進階-09接口和抽象類

接口

接口是一組功能的集合,可是接口中僅包含功能的名字,不包含具體的實現代碼
接口本質是一套協議標準,遵循這個標準的對象就能被調用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通常不會限制你必須怎麼寫,做爲一個優秀的程序員,就應該自覺遵照相關協議 因此有了鴨子類型這麼一說: 若是這個對象長得像鴨子,走路像鴨子,那就他是鴨子 你只要保證你的類按照相關的協議類編寫,也能夠達到提升擴展性的目的

相關文章
相關標籤/搜索