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