# Python中的多態如何理解?
Python中多態的作用
讓具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容(功能)的函數。
Python中多態的特點
1、只關心對象的實例方法是否同名,不關心對象所屬的類型;
2、對象所屬的類之間,繼承關系可有可無;
3、多態的好處可以增加代碼的外部調用靈活度,讓代碼更加通用,兼容性比較強;
4、多態是調用方法的技巧,不會影響到類的內部設計。
### 多態的`應用場景`
**1\. 對象所屬的類之間沒有繼承關系**
調用同一個函數`fly()`, 傳入不同的參數(對象),可以達成不同的功能
```
class Duck(object): # 鴨子類
def fly(self):
print("鴨子沿著地面飛起來了")
class Swan(object): # 天鵝類
def fly(self):
print("天鵝在空中翱翔")
class Plane(object): # 飛機類
def fly(self):
print("飛機隆隆地起飛了")
def fly(obj): # 實現飛的功能函數
obj.fly()
duck = Duck()
fly(duck)
swan = Swan()
fly(swan)
plane = Plane()
fly(plane)
```
上述代碼執行的結果是
```
鴨子沿著地面飛起來了
天鵝在空中翱翔
飛機隆隆地起飛了
```
**2\. 對象所屬的類之間有繼承關系(應用更廣)**
```
class gradapa(object):
def __init__(self,money):
self.money = money
def p(self):
print("this is gradapa")
class father(gradapa):
def __init__(self,money,job):
super().__init__(money)
self.job = job
def p(self):
print("this is father,我重寫了父類的方法")
class mother(gradapa):
def __init__(self, money, job):
super().__init__(money)
self.job = job
def p(self):
print("this is mother,我重寫了父類的方法")
return 100
#定義一個函數,函數調用類中的p()方法
def fc(obj):
obj.p()
gradapa1 = gradapa(3000)
father1 = father(2000,"工人")
mother1 = mother(1000,"老師")
fc(gradapa1) #這里的多態性體現是向同一個函數,傳遞不同參數后,可以實現不同功能.
fc(father1)
print(fc(mother1))
===運行結果:===================================================================================
this is gradapa
this is father,我重寫了父類的方法
this is mother,我重寫了父類的方法
100
```