文章目录
P128 多态问题的引出 P129 多态细节和使用 1. 多态介绍&特别说明 2. 多态的好处 3. 特别说明: Python多态的特点 4. 使用多态的机制来解决主人喂食物的问题
P128 多态问题的引出
先看一个问题
class Food :
name = None
def __init__ ( self, name) :
self. name = name
class Fish ( Food) :
pass
class Bone ( Food) :
pass
class Animal :
name = None
def __init__ ( self, name) :
self. name = name
class Dog ( Animal) :
pass
class Cat ( Animal) :
pass
class Master :
name = None
def __init__ ( self, name) :
self. name = name
def 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 = name
class Fish ( Food) :
pass
class Bone ( Food) :
pass
class Grass ( Food) :
pass
class Animal :
name = None
def __init__ ( self, name) :
self. name = name
class Dog ( Animal) :
pass
class Cat ( Animal) :
pass
class Horse ( Animal) :
pass
class Master :
name = None
def __init__ ( self, name) :
self. name = name
def 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)