文章目錄 P128 多態問題的引出 P129 多態細節和使用 1. 多態介紹&特別說明 2. 多態的好處 3. 特別說明: Python多態的特點 4. 使用多態的機制來解決主人喂食物的問題
P128 多態問題的引出
先看一個問題
class Food : name = None def __init__ ( self, name) : self. name = nameclass Fish ( Food) : pass class Bone ( Food) : pass class Animal : name = None def __init__ ( self, name) : self. name = nameclass Dog ( Animal) : pass class Cat ( Animal) : pass class Master : name = None def __init__ ( self, name) : self. name = namedef feed__cat ( self, cat : Cat, fish : Fish) : print ( f"主人 { self. name} ,給動物: { cat. name} ,喂的食物是 { fish. name} " ) def feed__dog ( self, dog : Dog, bone : Bone) : print ( f"主人 { self. name} ,給動物: { dog. name} ,喂的食物是 { bone. name} " )
master = Master( "zoran" )
cat = Cat( "小花貓" )
fish = Fish( "黃花魚" )
dog = Dog( "大黃狗" )
bone = Bone( "大棒骨" ) master. feed__cat( cat, fish)
master. feed__dog( dog, bone)
1)問題是:代碼的復用性不高,而且不利于代碼維護和功能擴展
2)解決方案:引出我們要講解的多態
P129 多態細節和使用
1. 多態介紹&特別說明
class Animal : def cry ( self) : pass class Dog ( Animal) : pass class Cat ( Animal) : def cry ( self) : print ( "小貓喵喵叫..." ) class Dog ( Animal) : def cry ( self) : print ( "小狗汪汪叫..." ) class Pig ( Animal) : def cry ( self) : print ( "小豬嚕嚕叫..." )
def func ( animal: Animal) : animal. cry( ) cat = Cat( )
dog = Dog( )
pig = Pig( ) func( cat)
func( dog)
func( pig)
2. 多態的好處
3. 特別說明: Python多態的特點
1)Python中函數/方法的參數是沒有類型限制的,所以多態在python中的體現并不是很嚴謹(比如:和java等強類型語言比)
2)Python并不要求嚴格的繼承體系,關注的不是對象的類型本身,而是它是否具有要調用的方法(行為)
class AA : def hi ( self) : print ( "AA-hi().." ) class BB : def hi ( self) : print ( "BB-hi()..." ) def test ( obj) : obj. hi( ) aa = AA( )
bb = BB( )
test( aa)
test( bb)
4. 使用多態的機制來解決主人喂食物的問題
class Food : name = None def __init__ ( self, name) : self. name = nameclass Fish ( Food) : pass class Bone ( Food) : pass
class Grass ( Food) : pass class Animal : name = None def __init__ ( self, name) : self. name = nameclass Dog ( Animal) : pass class Cat ( Animal) : pass
class Horse ( Animal) : pass class Master : name = None def __init__ ( self, name) : self. name = namedef feed ( self, animal: Animal, food: Food) : print ( f"主人 { self. name} ,給動物: { animal. name} ,喂的食物是 { food. name} " )
master = Master( "Zoran" )
cat = Cat( "小花貓" )
fish = Fish( "黃花魚" )
dog = Dog( "大黃狗" )
bone = Bone( "大棒骨" )
horse = Horse( "烏騅馬" )
grass = Grass( "新鮮草" ) master. feed( cat, fish)
master. feed( dog, bone)
master. feed( horse, grass)