Python 多态

40 阅读2分钟

多态

实现多态的步骤:

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)