開發者學堂課程【Python 語言基礎 3:函數、面向對象、異常處理:多态】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/601/detail/8754多态
内容簡介
一、多态的定義
二、面向對象的三大特征
多态是面向對象的三大特征之一
多态從字面上了解是多重形态
一個對象可以以不同的形态去呈現
例如:定義兩類
Class A:
Def __init__(self,name):
Self._name = name
@property
def name(self):
return self._name
@name. setter
def name(self ,name):
Self._name=name
Class B:
def__init__(self, name) :
self._ name=name
def__len__(self):
return 10
@property
def name(self ) :
return self. name
@name.setter
def name(self, name ):
self.2 name = name
Class C:
pass
a = A( ‘孫悟空’)
b = B(‘豬八戒’)
c = C( )
1、定義一個函數
l對于 say_hello( ) 這個函數來說,隻要對象中含有 name 屬性,它就可以作為參數傳遞,這個函數并不會考慮對象的類型,隻要有 name 屬性即可,這就是多态。
def say_hello(obj):
print(‘你好%s’%obj.name)
l 在 say_hello_2 中做了一個類型檢查,隻有 obj 是 A 類型的對象時,才可以正常使用,其他類型的對象都無法使用該函數,這個函數就違反了多态
l 注意:像 isinstance() 違反多态代碼的這種函數,在開發中一般是不會使用的
def say_hello_2(obj):
#做類型檢查
If isinstance(obj ,A)
print(‘你好%s’%obj.name)
l 違反了多态的函數,隻适用于一種類型的對象,無法處理其他類型對象,這樣導緻函數的适應性非常差
2、了解多态:鴨子類型
l 如果一個東西,走路像鴨子,叫聲像鴨子,那麼它就是鴨子
l 有了多态以後方法、定義更加的靈活、參數不用考慮具體類型,隻需要確定符合某個特征、某個屬性、某個方法,隻要符合某個特征,就可以使用多态。
3、舉例 len()函數(多态最好的展現)
1 =[1,2,3]
S = ‘hello’
print(len(10))
print(len(s))
print(len(b))
l 之是以一個對象能通過 len()來擷取長度,是因為對象中具有一個特殊的方法_ len_ 換句話說,隻要對象中具有 _ len_ 特殊方法,就可以通過 len( )來擷取它的長度.
二、面向對象的三大特征(所有面向對象的語言必須具備這三個特點)
1、封裝:確定對象中的資料安全
2、繼承:保證了對象的可擴充性
3、多态:保證了程式的靈活性,如果我們的方法、類型和概念綁定,函數的通用性将會降低,當具有了多态,函數便更加靈活。