人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Python教程之Python多態(tài)的深層次理解

發(fā)布日期:2022-01-04 16:30 | 文章來源:腳本之家


多態(tài)的實現(xiàn)必須滿足兩個前提條件

  • 1.繼承:多態(tài)一定是發(fā)生在子類和父類之間
  • 2.重寫:多態(tài)子類重寫了父類的方法

記住這兩點再結(jié)合代碼示例有助于理解多態(tài)

#多態(tài)的代碼實例
class Farther:
	def behavior(self,action):
		print("父親會%s" % action)
# 定義Son類繼承Farther類
class Son(Farther):
	def behavior(self,action):
		print("兒子會%s" % action)
# 定義Grandson類繼承Farther類
class Grandson(Farther):
	def behavior(self,action):
		print("孫子會%s" % action)
# 使用Farter類創(chuàng)建對象
# 程序在執(zhí)行時才會確定behavior方法是屬于哪一個對象的
f = Farther()
print(id(f))
f.behavior("吃飯")#父親會吃飯
f = Son()
print(id(f))
f.behavior("吃飯")#兒子會吃飯
f = Grandson()
print(id(f))
f.behavior("吃飯")#孫子會吃飯

運(yùn)行結(jié)果:
1603040478928
父親會吃飯
1603040477584
孫子會吃飯
1603040478928
兒子會吃飯

從以上代碼示例可以看出,Son,Grandson這兩個子類都繼承了Farther類,且都重寫了父類中的behavior方法;由此結(jié)果可見,同一個對象調(diào)用同一個(參數(shù),函數(shù)名完全相同)behavior方法時,由于f指向的的實例對象不同,程序在實際運(yùn)行時調(diào)用的并不是同一個behavior()方法,代碼會自動根據(jù)p的具體對象來決定執(zhí)行哪個behavior方法,這就是多態(tài)性

# 多態(tài)的應(yīng)用
class IceCream:
 def make_icecream(self,taste):
  print("尋找不同口味的冰淇淋...")
  taste.make(self)
# 定義抹茶味的冰淇淋和方法
class Tea:
 def make(self,make_icecream):
  print('%s 正在調(diào)用抹茶的制作方法' % make_icecream)
class Orange:
 def make(self,make_icecream):
  print('%s 正在調(diào)用抹茶的制作方法' % make_icecream)
class Apple:
 def make(self,make_icecream):
  print('%s 正在調(diào)用抹茶的制作方法' % make_icecream)
i = IceCream()
# 抹茶味
i.make_icecream(Tea())
# 橘子味
i.make_icecream(Orange())
#蘋果味
i.make_icecream(Apple())

# 執(zhí)行結(jié)果
尋找不同口味的冰淇淋...
<__main__.IceCream object at 0x000002700CF086D0> 正在調(diào)用抹茶的制作方法
尋找不同口味的冰淇淋...
<__main__.IceCream object at 0x000002700CF086D0> 正在調(diào)用抹茶的制作方法
尋找不同口味的冰淇淋...
<__main__.IceCream object at 0x000002700CF086D0> 正在調(diào)用抹茶的制作方法

解析:

從上述代碼可見,在調(diào)用IceCream類的make_icecream()方法時,程序并不關(guān)心為該方法傳入的參數(shù)對象taste是誰,只要求此參數(shù)對象taste包含make()方法即可,而調(diào)用者傳入的參數(shù)對象類型taste是子類還是其他類,Python并不在乎!

總結(jié)一句話就是:多態(tài)中不同的子類對象調(diào)用相同的父類方法,會產(chǎn)生不同的執(zhí)行結(jié)果

這里的多態(tài)性是指具有不同功能的函數(shù)可以使用相同的函數(shù)名,這樣就可以用一個函數(shù)名調(diào)用不同內(nèi)容的函數(shù)。

class Wechatpay:
 def __init__(self, name, money):
  self.name = name
  self.money = money
  def pay(self):
  print('%s通過微信支付了%s元' % (self.name, self.money))
class Alipay:
 def __init__(self, name, money):
  self.name = name
  self.money = money 
 def pay(self):
  print('%s通過支付寶支付了%s元' % (self.name, self.money))
 #這里的多態(tài)性體現(xiàn)是向同一個函數(shù),傳遞不同參數(shù)后,可以實現(xiàn)不同功能.
def pay(person):  
 person.pay()
# 實列化對象
ali = Alipay("xiaoming", 100)
wch = Alipay("xiaohong", 100)
pay(ali)
pay(wch)

以上就是Python教程之Python多態(tài)的深層次理解的詳細(xì)內(nèi)容,更多關(guān)于Python多態(tài)理解的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部