类的基础知识5|多态

多态是针对同一种行为表现出不同形态的能力。

在不同类中可能会有同一种行为,我们想要调用这个方法时,如果针对每一个类,设置一个单独的函数去调用它,那就太麻烦了。

这时候我们就需要多态,它可以先判断对象属于哪一类,在去对应的类调用相应的函数。

比如我们有许多种动物:牛马鸟蛇狗猪,每一种动物是一类,每一类我们要存储他们吃什么这一信息。使用多态就可以根据实例对象是那一类,再到相应类调用函数

"""Animal类的创建"""
class Animal():
    def food(self):
        print('Animals eat food.')

"""Dog类的创建,Dog是Animal类的子类"""
class Dog(Animal):
    def food(self):
        print('Dogs eat meat.')

"""Rabbit类的创建,Rabbit是Animal类的子类"""
class Rabbit(Animal):
    def food(self):
        print('Rabbits eat grass.')

"""People类的创建"""
class People():
    def food(self):
        print('People nearly eat everything.')


"""在所有类之外定义函数能够调用一个对象的food()方法"""

def fun(obj):
    obj.food()


"""调用函数,其中Animal()这个格式是创建一个类的实例对象"""
fun(Animal())
fun(Dog())
fun(Rabbit())

"""People类和其他类并不存在继承关系,但People类有food方法,所以它也会调用food方法"""
fun(People())

结果为:

Animals eat food.
Dogs eat meat.
Rabbits eat grass.
People nearly eat everything.

静态语言和动态语言实现多态的区别

静态语言实现多态的必要条件:继承、方法重写、父类引用指向子类对象

动态语言的多态崇尚"鸭子类型"

鸭子类型的含义:

一只鸟走起来像鸭子、游起泳来像鸭子、叫起来也像鸭子,那它就可以被当做鸭子。也就是说,它不关注对象的类型,而是关注对象具有的行为(方法)。

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。

在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。任何拥有这样的正确的走和叫方法的对象都可被函数接受。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值