溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python中什么是類的多態(tài)

發(fā)布時(shí)間:2020-09-23 14:14:07 來源:億速云 閱讀:185 作者:Leah 欄目:編程語(yǔ)言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)python中什么是類的多態(tài),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

多態(tài)首先是建立在繼承的基礎(chǔ)上的,先有繼承才能有多態(tài)。多態(tài)是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個(gè)方法,在繼承的子類中表現(xiàn)出不同的形式。多態(tài)成立的另一個(gè)條件是在創(chuàng)建子類時(shí)候必須使用父類new子類的方式。

Fu f1 = new Zi1();
Fu f2 = new Zi2();
f1.c();
f2.c();

子類Zi1,Zi2繼承了父類Fu,并且重寫了父類的方法c()

然后通過f1,和f2去調(diào)用子類重寫父類后的這個(gè)方法。即還有一個(gè)成立條件是子類必須重寫父類的方法。

面向?qū)ο蟮娜齻€(gè)基本特征是:封裝、繼承、多態(tài)。

比如,你和你朋友同時(shí)繼承了人這個(gè)類中打人的方法,但是你用拳頭打人和你朋友用巴掌打人的方法都是打人方法,卻表現(xiàn)出不同的形式,這就是現(xiàn)實(shí)生活中多態(tài)的理解。

關(guān)于多態(tài),有一個(gè)被稱作“鴨子類型”(duck typeing)的東西,其含義在維基百科中被表述為:

在程序設(shè)計(jì)中,鴨子類型(英語(yǔ):duck typing)是動(dòng)態(tài)類型的一種風(fēng)格。在這種風(fēng)格中,一個(gè)對(duì)象有效的語(yǔ)義,不是由繼承自特定的類或?qū)崿F(xiàn)特定的接口,而是由當(dāng)前方法和屬性的集合決定。這個(gè)概念的名字來源于由 James Whitcomb Riley 提出的鴨子測(cè)試(見下面的“歷史”章節(jié)),“鴨子測(cè)試”可以這樣表述:“當(dāng)看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”

在 python 中多態(tài)的經(jīng)典使用可以用兩句話來總結(jié)對(duì)擴(kuò)展開放和對(duì)修改封閉,即著名的「開閉」原則。對(duì)擴(kuò)展開放即可以隨意的增加父類的子類;對(duì)修改封閉即對(duì)于依賴父類的函數(shù),新增子類對(duì)該函數(shù)無任何影響無需做任何修改。

我們可以通過以下代碼來加深理解:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def print_age(self):
        print("%s's age is %s" % (self.name, self.age))
class Man(Person):
    def print_age(self):
        print("Mr. %s's age is %s" %(self.name, self.age))
class Woman(Person):
    def print_age(self):
        print("Ms. %s's age is %s" %(self.name, self.age))
        
def person_age(person):
    person.print_age()
person = Person("kevin", 23)
man = Man("Bob", 33)
woman = Woman("Lily", 28)
person_age(person)
person_age(man)
person_age(woman)

以上代碼執(zhí)行結(jié)果如下:

kevin's age is 23
Mr. Bob's age is 33
Ms. Lily's age is 28

在以上代碼中函數(shù) person_age 函數(shù)的輸入?yún)?shù)為類 Person 的實(shí)例,但是在實(shí)際執(zhí)行過程中 Person 的子類 Man 和 Woman 的示例同樣可以在 person_age 函數(shù)中正常運(yùn)行,這既是類的多態(tài)的作用。實(shí)際上任何實(shí)現(xiàn)了函數(shù) print_age 函數(shù)的類均可作為 person_age 函數(shù)的參數(shù)且能夠正常工作,這既是前面提到的「鴨子類型」。

上述就是小編為大家分享的python中什么是類的多態(tài)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI