Python 面向对象之何为多态

多态是面向对象三大特性之一。

多态简单来说就是一类事物具有多种形态,指的是:即使不知道一个变量所引用的对象是什么类型,依然可以通过这个变量调用方法,在运行过程中,根据变量所引用的对象的类型,多态的决定调用哪个对象的方法。

多态:不同的子类对象调用相同的父类方法,产生不同的结果。它是以继承和重写父类的方法为前提的。注意:Python的多态不是必须依赖继承,但是最好依赖继承。

多态只是一种调用方法的技巧,不会影响到类的内部设计。

class Animal(object):
    def __init__(self,name):
        self.name = name
    def bark(self):
        print('动物在叫')

class Dog(Animal):      # 继承自父类Animal
    def bark(self):     # 重写父类的bark方法
        print(f'{self.name}在汪汪叫……')

class Cat(Animal):
    def bark(self):
        print(f'{self.name}在喵喵叫……')

class Person(object):
    def __init__(self,name):
        self.name = name
    # 传入不同的对象,执行不同的方法
    def game_with_animal(self,animal):  # 根据传入的animal所引用的对象类型,来决定调用哪一个对象的方法
        print(f'{self.name}和{animal.name}在一起玩游戏。')
        animal.bark()

dog = Dog('旺财')
tom = Cat('汤姆')

p = Person('星星')
# 传入不同的对象,看执行结果
p.game_with_animal(dog)     # 传入的是Dog所引用的对象,所以调用的是Dog类中的方法
p.game_with_animal(tom)


# 根据传入的obj所引用的对象类型,来决定调用的是哪一个类中的bark方法
def demo(obj):
    obj.bark()
demo(Dog('旺财')) # 传入的是Dog类的实例对象,则执行Dog类中的方法
demo(Cat('汤姆')) # 传入的是Cat类的实例对象,则执行Cat类中的方法
图片[1]-Python 面向对象之何为多态-尤尤'blog

多态的优点

增加代码的灵活度。

动态语言和静态语言(如Java)关于多态

动态语言的多态崇尚‘鸭子类型’,就是说当一只鸟走起来像鸭子、游起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心对象是什么类型,只关心对象的行为。Python就是一种动态语言,可以在创建对象之后,动态的绑定属性和方法。

静态语言实现多态,需要满足三个必要条件:继承、方法重写、父类引用指向子类对象。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容