1. 面向对象的三大特性
2. 多态
传入不同的对象,产生不同的结果
2.1 了解多态
2.2 体验多态
class Dog(object):
def work(self): # 父类提供统一的方法,哪怕是空方法
pass
class ArmyDog(Dog): # 继承 Dog
def work(self): # 子类重写方法,并且处理自己的行为
print('追击敌人')
class DrugDog(Dog):
def work(self):
print('追查毒品')
class Person(object):
def work_with_dog(self, dog):
dog.work() # 使用小狗可以根据对象的不同而产生不同的运行效果, 保障了代码的稳定性
# 子类对象可以当作父类来使用
dog = Dog()
print(isinstance(dog, Dog)) # True
ad = ArmyDog()
print(isinstance(ad, Dog)) # True
dd = DrugDog()
print(isinstance(dd, Dog)) # True
p = Person()
p.work_with_dog(dog)
p.work_with_dog(ad) # 同一个方法,只要是 Dog 的子类就可以传递,提供了代码的灵活性
p.work_with_dog(dd) # 并且传递不同对象,最终 work_with_dog 产生了不同的执行效果
# 最终效果
# Person 类中只需要调用 Dog 对象 work() 方法,而不关心具体是 什么狗
# work() 方法是在 Dog 父类中定义的,子类重写并处理不同方式的实现
# 在程序执行时,传入不同的 Dog 对象作为实参,就会产生不同的执行效果