我們要給動物再加上Runnable和Flyable的功能唆鸡,只需要先定義好Runnable和Flyable
的類:
class Runnable(object): def run(self): print('Running...') class Flyable(object): def fly(self): print('Flying...')
對于需要Runnable功能的動物,就多繼承一個Runnable枣察,例如Dog:
class Dog(Mammal, Runnable): pass
通過多重繼承争占,一個子類就可以同時獲得多個父類的所有功能
在設(shè)計類的繼承關(guān)系時,通常序目,主線都是單一繼承下來的臂痕,例如,Ostrich繼承自Bird猿涨。但是握童,如果需要“混入”額外的功能,通過多重繼承就可以實現(xiàn)叛赚,比如澡绩,讓Ostrich除了繼承自Bird外,再同時繼承Runnable俺附。這種設(shè)計通常稱之為MixIn肥卡。
Python自帶的很多庫也使用了MixIn。舉個例子事镣,Python自帶了TCPServer和UDPServer這兩類網(wǎng)絡(luò)服務(wù)步鉴,而要同時服務(wù)多個用戶就必須使用多進(jìn)程或多線程模型,這兩種模型由ForkingMixIn和ThreadingMixIn提供。通過組合氛琢,我們就可以創(chuàng)造出合適的服務(wù)來只嚣。比如,編寫一個多進(jìn)程模式的TCP服務(wù)艺沼,定義如下:
class MyTCPServer(TCPServer, ForkingMixIn): pass
編寫一個多線程模式的UDP服務(wù)册舞,定義如下:
class MyUDPServer(UDPServer, ThreadingMixIn): pass