老生常談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-10
Python IndexError報(bào)錯(cuò)分析及解決方法
在Python編程中,IndexError是一種常見(jiàn)的異常類型,它通常發(fā)生在嘗試訪問(wèn)序列(如列表、元組或字符串)中不存在的索引時(shí),本文將深入分析IndexError的成因、表現(xiàn)形式,并提供相應(yīng)的解決辦法,同時(shí)附帶詳細(xì)的代碼示例,需要的朋友可以參考下2024-07-07

