文章目录  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)