全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

Python培訓(xùn):python中多態(tài)的作用是什么?

更新時(shí)間:2022-10-19 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在強(qiáng)類(lèi)型語(yǔ)言(例如Java或C#)中,多態(tài)是指允許使用一個(gè)父類(lèi)類(lèi)型的變量或常量來(lái)引用一個(gè)子類(lèi)類(lèi)型的對(duì)象,根據(jù)被引用子類(lèi)對(duì)象特征的不同,得到不同的運(yùn)行結(jié)果。即使用父類(lèi)的類(lèi)型來(lái)調(diào)用子類(lèi)的方法。

  在Python中,多態(tài)指在不考慮對(duì)象類(lèi)型的情況下使用對(duì)象。相比于強(qiáng)類(lèi)型,Python更推崇“鴨子類(lèi)型”?!傍喿宇?lèi)型”是這樣推斷的:如果一只生物走起路來(lái)像鴨子,游泳起來(lái)像鴨子,叫起來(lái)也像鴨子,那么它就可以當(dāng)做鴨子。也就是說(shuō),它不關(guān)注對(duì)象的類(lèi)型,而是關(guān)注對(duì)象具有的行為。

  例12-7 多態(tài).py

# 定義一個(gè)表示動(dòng)物的類(lèi)
class Animal(object):
    def shout(self): # 叫的方法
        print("--Animal--shout--")
# 定義一個(gè)表示狗的類(lèi),繼承自動(dòng)物類(lèi)
class Dog(Animal):
    def shout(self): # 重寫(xiě)父類(lèi)的方法
        print("--汪汪--")
# 定義一個(gè)表示貓的類(lèi),繼承自動(dòng)物類(lèi)
class Cat(Animal):
    def shout(self): # 重寫(xiě)父類(lèi)的方法
       print("--喵喵--")
# 定義一個(gè)函數(shù)
def func(temp):
   temp.shout()
dog = Dog()
func(dog)
cat = Cat()
func(cat)

  在例12-7中,首先定義了Animal(動(dòng)物)類(lèi),該類(lèi)中有個(gè)shout方法,其次定義了繼承自Animal的兩個(gè)子類(lèi)Dog(狗)和Cat(貓),分別在兩個(gè)類(lèi)中重寫(xiě)了shout方法,然后定義了一個(gè)帶參數(shù)的函數(shù)func,在該函數(shù)中調(diào)用了shout方法,最后分別創(chuàng)建了Dog類(lèi)的對(duì)象dog和Cat類(lèi)的對(duì)象cat,并作為參數(shù)調(diào)用了func函數(shù)。

  程序運(yùn)行的結(jié)果如圖12-12所示。

1666158551249_多態(tài).jpg

  圖12-12 運(yùn)行結(jié)果

  值得一提的是,func函數(shù)中沒(méi)有規(guī)定參數(shù)temp類(lèi)型,它可以接收任意類(lèi)型的對(duì)象,但是傳入的這些對(duì)象中必須有shout方法。

分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!