一、 什么是多態
<1>一種類型具有多種類型的能力
<2>允許不同的對象對同一消息做出靈活的反應
<3>以一種通用的方式對待個使用的對象
<4>非動態語言必須通過繼承和接口的方式來實現
二、 python中的多態
<1>通過繼承實現多態(子類可以作為父類來使用)
<2>子類通過重載父類的方法實現多態
class Animal:
def move(self):
print('animal is moving....')
class Dog(Animal):
pass
def move(obj):
obj.move()
>>>move(Animal())
>>>animal is moving....
>>>move(Dog())
>>>animal is moving....
class Fish(Animal):
def move(self):
print('fish is moving....')
>>>move(Fish())
>>>fish is moving....
三、 動態語言和鴨子類型
<1>變量綁定的類型是不確定的
<2>函數和方法可以接收任何類型的參數
<3>調用方法時不檢查提供的參數類型
<4>調用是否成功有參數的方法和屬性確定,調用不成功則拋出錯誤
<5>不用實現接口
class P:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, oth):
return P(self.x+oth.x, self.y+oth.y)
def info(self):
print(self.x, self.y)
class D(P):
def __init__(self, x, y, z):
super.__init__(x, y)
self.z = z
def __add__(self, oth):
return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)
def info(self):
print(self.x, self.y, self.z)
class F:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def __add__(self, oth):
return D(self.x+oth.x, self.y+oth.y, self.z+oth.z)
def info(self):
print(self.x, self.y, self.z)
def add(a, b):
return a + b
if __name__ == '__main__':
add(p(1, 2), p(3, 4).info())
add(D(1, 2, 3), D(1, 2, 3).info())
add(F(2, 3, 4), D(2, 3, 4).info())
四、 多態的好處
<1>可實現開放的擴展和修改的封閉
<2>使python程序更加的靈活
以上這篇老生常談python之鴨子類和多態就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

