DAY 10. 鴨子類型
這個概念來源于美國印第安納州的詩人詹姆斯·惠特科姆·萊利(James Whitcomb Riley,1849-1916)的詩句:”When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”
當我看到一只像鴨子一樣走路,像鴨子一樣游泳,像鴨子一樣嘎嘎叫的鳥,我就叫它鴨子。
鴨子類型在動態編譯語言如python,go中經常使用,意思是程序只關心對象行為而不關心對象類型,如
class Duck:def __init__(self, name):self._name = namedef call(self):print("gua gua gua")class Frog:def __init__(self, name):self._name = namedef call(self):print("gua gua gua")def quack(duck):duck.call()if __name__ == '__main__':duck = Duck('Duck')frog = Frog('Frog')quack(duck)quack(frog)
雖然duck和frog不是同一個類型,但他們都有相同的方法call,那就可以把他們“當作同一種類型——鴨子類型”