老生常談python之鴨子類和多態(tài)
一、 什么是多態(tài)
<1>一種類型具有多種類型的能力
<2>允許不同的對(duì)象對(duì)同一消息做出靈活的反應(yīng)
<3>以一種通用的方式對(duì)待個(gè)使用的對(duì)象
<4>非動(dòng)態(tài)語(yǔ)言必須通過(guò)繼承和接口的方式來(lái)實(shí)現(xiàn)
二、 python中的多態(tài)
<1>通過(guò)繼承實(shí)現(xiàn)多態(tài)(子類可以作為父類來(lái)使用) <2>子類通過(guò)重載父類的方法實(shí)現(xiàn)多態(tài) 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....
三、 動(dòng)態(tài)語(yǔ)言和鴨子類型
<1>變量綁定的類型是不確定的
<2>函數(shù)和方法可以接收任何類型的參數(shù)
<3>調(diào)用方法時(shí)不檢查提供的參數(shù)類型
<4>調(diào)用是否成功有參數(shù)的方法和屬性確定,調(diào)用不成功則拋出錯(cuò)誤
<5>不用實(shí)現(xiàn)接口
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())
四、 多態(tài)的好處
<1>可實(shí)現(xiàn)開(kāi)放的擴(kuò)展和修改的封閉
<2>使python程序更加的靈活
以上這篇老生常談python之鴨子類和多態(tài)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Flask登錄注冊(cè)項(xiàng)目的簡(jiǎn)單實(shí)現(xiàn)
一個(gè)簡(jiǎn)單的用戶注冊(cè)和登錄的頁(yè)面,涉及到驗(yàn)證,數(shù)據(jù)庫(kù)存儲(chǔ)等等,本文主要介紹了Flask登錄注冊(cè)項(xiàng)目的簡(jiǎn)單實(shí)現(xiàn),從目錄結(jié)構(gòu)開(kāi)始,感興趣的可以了解一下2021-05-05使用OpenCV實(shí)現(xiàn)迷宮解密的全過(guò)程
同學(xué)發(fā)了我張迷宮圖片,讓我走迷宮來(lái)緩解暴躁,于是乎就碼了一個(gè)程序出來(lái),下面這篇文章主要給大家介紹了關(guān)于使用OpenCV實(shí)現(xiàn)迷宮解密的相關(guān)資料,需要的朋友可以參考下2022-10-10Python IndexError報(bào)錯(cuò)分析及解決方法
在Python編程中,IndexError是一種常見(jiàn)的異常類型,它通常發(fā)生在嘗試訪問(wèn)序列(如列表、元組或字符串)中不存在的索引時(shí),本文將深入分析IndexError的成因、表現(xiàn)形式,并提供相應(yīng)的解決辦法,同時(shí)附帶詳細(xì)的代碼示例,需要的朋友可以參考下2024-07-07