多态
实现多态的步骤:
1、定义一个父类(Base),实现某个方法(比如:run)
2、定义多个子类,在子类中重写父类的方法(run),每个子类run方法实现不同的功能
3、假设我们定义了一个函数,需要一个Base类型的对象的参数,那么调用函数的时候,传入Base类不同的子类对象,那么这个函数就会执行不同的功能,这就是多态的体现。
一个父类,他具有多个子类,不同的子类在调用相同的方法,执行的时候产生不同的形态,这个叫多态。
class Animal(object):
"""动物类"""
def func(self):
print('动物发出了声音')
class Cat(Animal):
"""猫类"""
def func(self):
print('喵 喵 喵')
class Dog(Animal):
"""狗类"""
def func(self):
print('汪 汪 汪 ')
class Hero:
def func(self):
print('这个是英雄类的方法,不是动物类的对象')
def work01(musen: Animal):
musen.func()
work01(Hero())
- 多态的意义:
对于一个变量,我们只需要知道他是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法(调用方只管调用,不管细节) 当需要新增功能,只需要新增一个Animal的子类实现run()方法,就可以在原来的基础上进行功能扩展,这就是著名的“开放封闭”原则:
"开放封闭"原则: 对扩展开放:允许新增Animal子类 对修改封闭:不需要修改依赖Animal类型的run()等函数
实例
class Animal(object):
def speak(self):
print('动物的叫声')
pass
class Cat(Animal):
def speak(self):
print('喵喵')
class Dog(Animal):
def speak(self):
print('汪汪')
class Test(object):
def speak(self):
print('test')
def speak(object): # animal
object.speak()
animal = Animal()
kitty = Cat()
puppy = Dog()
t = Test()
speak(animal)
speak(kitty)
speak(puppy)
speak(t)