鴨子類型

鴨子類型  在程序設計中是動態類型的一種風格 。 在這種風格中 ， 一個對象有效的語義 ， 不是由繼承自特定的類或實現特定的接口 ， 而是由 「 當前方法和屬性的集合 」 決定 。 這個概念的名字來源於由提出的鴨子測試 （ 見下面的 “ 歷史 ” 章節 ） ， “ 鴨子測試 ” 可以這樣表述 ： “ 當看到一隻鳥走起來像鴨子 、 游泳起來像鴨子 、 叫起來也像鴨子 ， 那麼這隻鳥就可以被稱爲鴨子 。 ” 在鴨子類型中 ， 關注點在於對象的行爲 ， 能做什麼 ； 而不是關注對象所屬的類型 。 例如 ， 在不使用鴨子類型的語言中 ， 我們可以編寫一個函數 ， 它接受一個類型爲 「 鴨子 」 的對象 ， 並調用它的 「 走 」 和 「 叫 」 方法 。 在使用鴨子類型的語言中 ， 這樣的一個函數可以接受一個任意類型的對象 ， 並調用它的 「 走 」 和 「 叫 」 方法 。 如果這些需要被調用的方法不存在 ， 那麼將引發一個運行時錯誤 。 任何擁有這樣的正確的 「 走 」 和 「 叫 」 方法的對象都可被函數接受的這種行爲引出了以上表述 ， 這種決定類型的方式因此得名 。 鴨子類型通常得益於 「 不 」 測試方法和函數中參數的類型 ， 而是依賴文檔 、 清晰的代碼和測試來確保正確使用 。 在常規類型中 ， 我們能否在一個特定場景中使用某個對象取決於這個對象的類型 ， 而在鴨子類型中 ， 則取決於這個對象是否具有某種屬性或者方法 — — 即只要具備特定的屬性或方法 ， 能通過鴨子測試 ， 就可以使用 。