Pyhton之接口

如果還不太理解多態的可以看看這個淺談Python之多態與接口
接口這個概念其實很簡單也很複雜,簡單在於他的使用,複雜在於他的由來。
如果想知道由來,我們必須先知道抽象類這個概念。
在這裏插入圖片描述
我們創建一個Car類和一個Truck類,那麼他們理所當然都有Run和Stop的方法,否則叫什麼車呢?
那麼如果是這樣,我們加一類車就要重寫一次方法,那這個代碼要有多醜?
因此我們可以創建一個類,一個什麼類?一個他們共同的基類Vehicle,然後在基類中寫出一個Stop方法,但是假如Stop方法裏面執行的內容不一樣怎麼辦??那你可能會說沒關係,分情況嘛,if是萬能的。(但是這裏其實已經違反了開閉原則,能儘量不動基類的代碼就不要去動基類的代碼,除非是修Bug或者加入新功能)
沒錯,if是萬能的,但是程序員是懶的。懶人改變世界。因此他們發明了抽象類和純虛函數。
在這裏插入圖片描述
所謂的純虛函數就是不含有方法體的函數,只有一個方法名。
而含有純虛函數的類就是抽象類。
而含有純虛函數,而不含有其他函數的抽象類就是所謂接口。

抽象類是 未完全 實現邏輯的類。
接口則是 完全未 實現邏輯的類。

接口一般以大寫i 開頭。
這樣我們的當我們創建一個新類是就可以不再需要去重新寫方法,而只需要與那個接口的類遵守同一個協議即可。
這樣不僅僅是方便,而且使代碼更加具有可讀性。

而在python中我們就可以依照這個方法寫一個接口函數。

class People():
    def Run(self):
        print('I am walking')

class Dog():
    def Run(self):
        print('I am running')
        
def func(object):
    object.Run()

p_1 = People()
p_2 = People()
d_1 = Dog()

func(p_1)
func(p_2)
func(d_1)

運行一下
在這裏插入圖片描述
那麼這樣我們就寫了一個函數去調用其他函數,這就是所謂的接口函數,而被調用的函數就是所謂的回調函數。

這樣代碼是不是看起來要乾淨整潔得多,甚至不需要因爲有一個新類而去寫一下新的代碼,而是用同一的方法去調用不同的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章