Python學習筆記(十四)繼承和多態

繼承有什么好處?最大的好處是子類獲得了父類的全部功能。

判斷一個變量是否是某個類型可以用isinstance()判斷:

>>>isinstance(a, list)

True

這就是多態真正的威力:調用方只管調用,不管細節

對擴展開放:允許新增Animal子類;

對修改封閉:不需要修改依賴Animal類型的run_twice()等函數。


動態語言的“鴨子類型”,它并不要求嚴格的繼承體系,一個對象只要“看起來像鴨子,走起路來像鴨子”,那它就可以被看做是鴨子。


在評論區的一個串聯整篇的例子

#定義一個父類一個子類

class Province(object):

? ? def __init__(self,proname):

? ? ? ? self.proname=proname

? ? def ps(self):

? ? ? ? print('I am in %s'%self.proname)


class City(Province):

? ? def __init__(self,proname,cityname):

? ? ? ? self.cityname=cityname?

? ? ? ? Province.__init__(self,proname)

? ? def ps1(self):

? ? ? ? print('I\'m in %s-%s' %(self.proname,self.cityname))

#定義一個獨立的類

class Timer(object):

? ? def ps(self):

? ? ? ? print('我不屬于Province類或其子類,但我有ps方法我同樣可以被調用')

? ? def ps1(self):

? ? ? ? print('我不屬于Province類或其子類,但我有ps1方法我同樣可以被調用')

#定義一個函數

def f(x):

? ? x.ps()

? ? x.ps1()

#調用部分

f(City('上海','浦東'))

f(Timer())

返回結果I am in上海I'm in上海-浦東

我不屬于Province類或其子類,但我有ps方法我同樣可以被調用我不屬于Province類火氣子類,但我有ps1方法我同樣可以被調用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容