鴨子型別
面向对象编程中的一种动态类型风格 / 維基百科,自由的 encyclopedia
鴨子型別(英語:duck typing)在程式設計中是動態型別的一種風格。在這種風格中,一個物件有效的語意,不是由繼承自特定的類或實現特定的介面,而是由「當前方法和屬性的集合」決定。這個概念的名字來源於由詹姆斯·惠特科姆·萊利(英語:James Whitcomb Riley)提出的鴨子測試(見下面的「歷史」章節),「鴨子測試」可以這樣表述:
在鴨子型別中,關注點在於物件的行為,能做什麼;而不是關注物件所屬的類型。例如,在不使用鴨子型別的語言中,我們可以編寫一個函數,它接受一個類型為「鴨子」的物件,並呼叫它的「走」和「叫」方法。在使用鴨子型別的語言中,這樣的一個函數可以接受一個任意類型的物件,並呼叫它的「走」和「叫」方法。如果這些需要被呼叫的方法不存在,那麼將引發一個執行時錯誤。任何擁有這樣的正確的「走」和「叫」方法的物件都可被函數接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
鴨子型別通常得益於「不」測試方法和函數中參數的類型,而是依賴文件、清晰的代碼和測試來確保正確使用。
在常規類型中,我們能否在一個特定場景中使用某個物件取決於這個物件的類型,而在鴨子型別中,則取決於這個物件是否具有某種屬性或者方法——即只要具備特定的屬性或方法,能通過鴨子測試,就可以使用。