在軟體設計裡,代碼的複用和代碼穩定性,一直是軟體開發的重要目標之一,因為只有這樣才能積累各種基礎組件,以及維護以前做過的工作。從複用的特性來說,就是利用以前做過的工作,比如就像硬體裡的IC一樣,不需要知道它是怎麼樣實現的,只要使用它就行了。因而軟體也需要有這種IC,在代碼層次裡的IC,以前看來只是用函數的方式複用,或者只是資料結構的複用。當邁進物件導向編程時代時,自然而然地想到就使用類來複用了,這樣資料結構和函數都同時能複用上,比函數的複用更省心了一步,就是資料結構和演算法都不需要關心了,只關心類提供了幾個介面即可。比如想要MD5進行簽名,只需要使用這個類設定計算的資料和長度,就可以直接返回相應MD5簽名了。而不必關心內部是做什麼運算,使用什麼資料結構來儲存中間變數等。在類的複用裡,主要有兩種方式,一種是直接使用類,不對類進行任何的改變,比如類的組合方式;另外一種是對類進行改變,繼承就是其主要方式。繼承的方式要比組合的方式更方便,因為繼承可以直接使用父類的資料結構,不需考慮父類的生命週期,而組合的方式是一定要考慮的。繼承的方式可以不改變以前介面,而使用最新的最佳化的演算法,而組合的方式是一定要改變介面。繼承的方式處理不同版本軟體相容性也要方便,比如開發三個版本的軟體,每一個版本功能測試完成之後,再開發下一個版本,在開發下一個版本時,又不想改動原來的代碼,但又要利用和修改其一些計算方法,使用繼承是最好的。這樣可以在一個類裡實現自動識別不同的版本功能進行處理,只需要建立時建立新的類對象就可以。
Python裡也設計有類繼承,它的類繼承方式怎麼樣呢?大體如下:
class Super: def __init__(self, x): print('Super init') class Sub(Super): def __init__(self, x, y): Super.__init__(self, x) print('Sub init') I = Sub(1, 2)
從上面可以看到,Super類是基類(又稱為超類),Sub是繼承Super類。Sub類可以繼承多個基類,只要在括弧並列多個就行,如Sub(Super1, Super2, Super3)。在衍生類別裡要明確地調用基類的建構函式,才可以運行基類建構函式,如Super.__init__(self, x)。這一點不像C++的特性,在C++裡是自動運行基類的建構函式,再運行衍生類別的建構函式。Python裡按需要定製,想什麼時候運行就在什麼地方調用。
返回欄目頁:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/