天天看點

Python學習劄記(三十八) 面向對象程式設計 Object Oriented Program 9

參考:多重繼承

NOTE

#!/usr/bin/env python3

class Animal(object):
	def __init__(self, name):
		self.name = name
	def getname(self):
		print(self.name)

class Fly(object):
	def __init__(self):
		pass
	def getfly(self):
		print('could fly')

class Bird(Animal, Fly):
	pass

def main():
	b = Bird('bird')
	b.getname()
	b.getfly()

if __name__ == '__main__':
	main()
           
sh-3.2# ./oop10.py 
bird
could fly
           

通過多重繼承,一個子類就可以同時獲得多個父類的所有功能。

1.MixIn

一般來說,繼承的關系是主線單一繼承下來的,如:

Animal -> Bird -> Bat
           

但是如果要加入其它額外的屬性和方法,可以通過多重繼承來實作,這種方式稱為MixIn。

MixIn的目的就是給一個類增加多個功能,這樣,在設計類的時候,我們優先考慮通過多重繼承來組合多個MixIn的功能,而不是設計多層次的複雜的繼承關系。

2.Python自帶的很多庫也使用了MixIn。

舉個例子,Python自帶了TCPServer和UDPServer這兩類網絡服務,而要同時服務多個使用者就必須使用多程序或多線程模型,這兩種模型由ForkingMixIn和ThreadingMixIn提供。通過組合,我們就可以創造出合适的服務來。

2017/3/5

To improve is to change, to be perfect is to change often.