#多态:多种形态、多种状态,同一种行为的对于不同的子类【对象】有不同的行为表现
#多态必须发生在父类和子类之间、子类重写父类的方法
class Animal:
'''
父类
'''
def say_who(self):
print('我是一只动物')
pass
pass
class Duck(Animal):
'''
子类
'''
def say_who(self): #重写父类的方法
print('我是一只漂亮的鸭子')
pass
pass
class Dog(Animal): #继承父类
def say_who(self): #重写父类的方法
print('我是一只可爱的小狗')
pass
pass
class Cat(Animal): #继承父类
def say_who(self): #重写父类的方法
print('我是一只毛茸茸的小猫')
pass
pass
class People:
def say_who(self):
print('我来自深圳')
pass
duck1=Duck()
duck1.say_who()
dog=Dog()
dog.say_who()
cat=Cat()
cat.say_who()
people=People()
people.say_who()
print('--------------------------------')
def commonInvoke(obj):
'''
统一调用
:param obj: 对象的实例
:return:
'''
obj.say_who()
pass
listObj=[Duck(),Dog(),Cat(),People()] #鸭子类型
for item in listObj:
'''
循环调用函数
'''
commonInvoke(item)
#总结:增加程序的灵活性、增加程序的扩展性
#鸭子类型:是动态类型的一种风格,在这种风格中,一个对象的有效的语义,不是由继承子特定的类
# 或实现特定的接口,而是有当前的方法和属性的集合决定的。
#鸭子测试:当一只鸟走起路来想鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被叫做鸭子
#在鸭子类型中,关注的不是对象类型的本身,而是它是如何使用的
运行结果