python如何使用多态_在python 3中,如何将多态应用于类
介紹
多態(tài)性是為不同的基礎(chǔ)形式(例如,數(shù)據(jù)類(lèi)型或類(lèi))利用同一接口的能力。這允許函數(shù)在不同時(shí)間使用不同類(lèi)型的實(shí)體。
對(duì)于Python中的面向?qū)ο缶幊?#xff0c;這意味著可以用與屬于特定類(lèi)的特定對(duì)象相同的方式來(lái)使用它,就好像它是屬于不同類(lèi)的不同對(duì)象一樣。
多態(tài)性提供了靈活性和松散的耦合,因此可以隨時(shí)間擴(kuò)展代碼,并且輕松維護(hù)它們。
本教程將介紹如何將多態(tài)應(yīng)用于Python中的類(lèi)。
創(chuàng)建多態(tài)類(lèi)
為了使用多態(tài)性,我們創(chuàng)建兩個(gè)不同的類(lèi),用于兩個(gè)不同的對(duì)象,每一個(gè)不同的類(lèi)都需要有一個(gè)共同的接口,這樣它們就可以被多態(tài)地使用,所以,我們?yōu)樗鼈兲峁┎煌邢嗤Q的方法。
我們創(chuàng)建一個(gè)Shark類(lèi)和Clownfish類(lèi),每個(gè)類(lèi)都將定義swim(),swim_backwards()和skeleton()的方法。polymorphic_fish.pyclass Shark():
def swim(self):
print("The shark is swimming.")
def swim_backwards(self):
print("The shark cannot swim backwards, but can sink backwards.")
def skeleton(self):
print("The shark's skeleton is made of cartilage.")
class Clownfish():
def swim(self):
print("The clownfish is swimming.")
def swim_backwards(self):
print("The clownfish can swim backwards.")
def skeleton(self):
print("The clownfish's skeleton is made of bone.")
上面的代碼中,Shark和Clownfish類(lèi)都有三個(gè)相同名稱相同的方法,但是,這些方法的每個(gè)功能對(duì)于每個(gè)類(lèi)都不同。
讓我們將這些類(lèi)實(shí)例化為兩個(gè)對(duì)象:polymorphic_fish.py...
sammy = Shark()
sammy.skeleton()
casey = Clownfish()
casey.skeleton()
當(dāng)使用python polymorphic_fish.py命令運(yùn)行程序時(shí),我們可以看到每個(gè)對(duì)象都按照預(yù)期的方式運(yùn)行:OutputThe shark's skeleton is made of cartilage.
The clownfish's skeleton is made of bone.
現(xiàn)在,我們有兩個(gè)使用通用接口的對(duì)象,無(wú)論它們的類(lèi)型如何,我們都可以以相同的方式使用這兩個(gè)對(duì)象。
多態(tài)性與類(lèi)方法
為了展示Python如何以相同的方式使用這些不同的類(lèi)類(lèi)型,我們首先可以創(chuàng)建一個(gè)遍歷對(duì)象元組的for循環(huán)。然后我們可以調(diào)用這些方法,而不用關(guān)心每個(gè)對(duì)象是什么類(lèi)型的,我們僅假設(shè)這些方法實(shí)際上存在于每個(gè)類(lèi)中。polymorphic_fish.py...
sammy = Shark()
casey = Clownfish()
for fish in (sammy, casey):
fish.swim()
fish.swim_backwards()
fish.skeleton()
我們有兩個(gè)對(duì)象,Shark類(lèi)的sammy和Clownfish類(lèi)的casey ,我們的for循環(huán)迭代這些對(duì)象,在每個(gè)對(duì)象上調(diào)用swim(),swim_backwards()和skeleton()方法。
運(yùn)行程序時(shí),輸出將如下所示:OutputThe shark is swimming.
The shark cannot swim backwards, but can sink backwards.
The shark's skeleton is made of cartilage.
The clownfish is swimming.
The clownfish can swim backwards.
The clownfish's skeleton is made of bone.
for循環(huán)首先通過(guò)Shark類(lèi)的sammy實(shí)例化,然后是Clownfish類(lèi)的casey對(duì)象,先看到與Shark類(lèi)相關(guān)的方法。
這表明python在不知道或關(guān)心每個(gè)對(duì)象的類(lèi)類(lèi)型的情況下使用了這些方法,也就是說(shuō),以多態(tài)方式使用了這些方法。
函數(shù)的多態(tài)性
我們還可以創(chuàng)建一個(gè)可以接受對(duì)象的函數(shù),從而實(shí)現(xiàn)多態(tài)。
我們創(chuàng)建一個(gè)叫in_the_pacific()的函數(shù),它接受一個(gè)我們可以調(diào)用fish的對(duì)象,使用的是名稱fish,實(shí)例化的對(duì)象都可以被調(diào)用到這個(gè)函數(shù)中:polymorphic_fish.py...
def in_the_pacific(fish):
接下來(lái),我們給函數(shù)一些使用我們傳遞給它的fish對(duì)象的函數(shù),在這種情況下,我們調(diào)用swim()方法,其中每個(gè)方法都在兩個(gè)類(lèi)Shark和Clownfish中定義:polymorphic_fish.py...
def in_the_pacific(fish):
fish.swim()
接下來(lái),如果沒(méi)有它們,我們創(chuàng)建Shark和Clownfish類(lèi)的實(shí)例化,使用這些函數(shù),我們可以使用相同的in_the_pacific()函數(shù)調(diào)用它們的操作:polymorphic_fish.py...
def in_the_pacific(fish):
fish.swim()
sammy = Shark()
casey = Clownfish()
in_the_pacific(sammy)
in_the_pacific(casey)
運(yùn)行程序時(shí),輸出將如下所示:OutputThe shark is swimming.
The clownfish is swimming.
盡管我們?cè)诙x時(shí)將隨機(jī)對(duì)象(fish )傳遞給in_the_pacific()函數(shù),但是仍然能夠有效地實(shí)例化Shark和Clownfish類(lèi),casey對(duì)象調(diào)用Clownfish類(lèi)中的swim()方法,而sammy對(duì)象調(diào)用在Shark類(lèi)中定義的swim()方法。
結(jié)束語(yǔ)
通過(guò)允許不同的對(duì)象通過(guò)多態(tài)的方式使用函數(shù)和方法,利用這個(gè)Python功能可為你的面向?qū)ο蟮拇a提供更大的靈活性和可擴(kuò)展性。
總結(jié)
以上是生活随笔為你收集整理的python如何使用多态_在python 3中,如何将多态应用于类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 理想汽车CEO曾试图接触威马沈晖?本人回
- 下一篇: python模块管理工具,Python的