美文网首页大数据 爬虫Python AI Sql程序员
Python的多态性并不是动态类型

Python的多态性并不是动态类型

作者: 唐大方 | 来源:发表于2017-03-31 06:30 被阅读0次

    什么是多态性?在Python语言中,我能想到的是可以这样定义参数:

    def sum(x, y)

    它不用指定参数类型,如果换了其他语言,比如JAVA,可能是这样的:

    public void sum(int x, int y)

    难道这就是所谓的多态性吗?

    不!不需要指定类型是动态类型语言的特点。

    通常来说,多态性指的是一个函数或方法,能够处理不同类型的输入。

    例如,对于add函数(或者是'+'操作符),在整数类中,执行的是整数的加法。在浮点型类中,执行的是浮点型数的加法。在不知道相加对象类型的情况下,多态性让add函数能够正常运行。

    再比如,在Python中,对一个列表中的元素进行排序,使用list.sort()函数,这时,sort()也不需要知道列表中元素是整型、浮点型或字符串等。当然,需要注意的是,多态性虽然不关心输入的类型,但并非意味着对任意类型的输入都能够正常运行,因为complex numbers, dict, 和range就无法进行排序,也就是说如果列表中含有复数,即使没有虚数部分,也会报错。

    举一个生活中的例子,证明多态性:

    定义一个speak()函数,在现实中就相当于喇叭。输入对象可以是人及各种动物。当喇叭(speak()函数)面对小猫的时,发出的是‘‘喵’’,面对小狗的时,发出的是‘‘woof’’……

    多态性有什么好处呢?

    其实很容易猜到,如果没有多态性,那么speak()函数会有多么臃肿,有多少种不同对象类型的输入,就有多少个speak()函数,而操作确实相同的。

    多态性在不同语言都有什么样的表现呢?

    在JAVA中,是对接口interface的实现。

    在Python中,由于它本身就是动态类型语言,对输入参数类型没有明确,因此也实现了多态性。

    相关文章

      网友评论

        本文标题:Python的多态性并不是动态类型

        本文链接:https://www.haomeiwen.com/subject/jcemottx.html