如何理解python中的多態?
OOP(面向對象https://www.52fb.cn)中,依賴于對象類型的行為,稱為多態。
廢話不說,直接上代碼:
注意:introduciton()函數,是針對App類型https://www.52fb.cn,而不是Toutiao、Weixin、 Taobao三個具體類型,因為我們在編寫introduction()函數時,不知道有多少種具體的App, 也不可能遍歷所有的App具體類型(每天都有新的app被開發)。但是無論將來你擴展多少個App具體類,只要它遵守協議(即實現hello成員函數),我們的introduction()都可以正確運行。這就是多態,使得我們https://www.52fb.cn時不針對具體的子類型,而是父類型https://www.52fb.cn,這使得代碼可以重用,開發效率大大提高。
因為python是動態類型語言,可能你看上述代碼時覺得理所當然,但這背后隱藏著更深層次的東西。一旦上述代碼放到靜態類型語言去實現,比如Java中,introduction函數的入參類型比必須提前定義好,你有兩個選擇,要么是App父類,要么是某個具體類型的App:如果是后者,你要代碼擴展性會很差,會寫更多的代碼;而如果是前者,恭喜你,你發揮了多態的威力。
正因為pytyon是動態類型,多態在Python中到處可見。比如“*”這個運算符(本質也是一個函數),對于int, string, list類型,都可以正確執行(見上圖的demo2部分)
以上為個人意見,歡迎批評指正,共同交流。喜歡的可以關注我,謝謝!
認同上述看法的,請點個贊再走。多謝支持!