Python是否支持多态的问题争论已久,在面向对象语言中,有三大特性(封装 继承 多态)Python作为典型的面向对象语言,怎么可能会不支持多态呢
产生这个问题的原因在于Python是一门动态编程语言,在运行的时候可以更改自己的结构。在java等面向对象语言中,定义一个变量,强制要求首先声明他的数据类型;而在Python中,这个步骤是完全可以忽略的。由于Python动态语言的特性,Python天生就支持多态,不需要像其他面向对象的语言那样使用了多态语法来实现多态的特性。大家争论Python是否支持多态,其实都是纠结在Python没有多态的语法。
在java中,如果一个变量被声明是int类型,如果被赋值为一个字符串对象,那一定会报错。在像Java这种强类型的语言中,一个变量被声明数据类型时候,只允许被这个类或这个类的派生类赋值。
而在Python中,声明一个变量,你可以给他赋任何类型的值(对象)
多态可以简单的理解为多种形态,多种类型。在Python中,不需要特殊的多态语法来实现多态的特性。
动态语言的优势与劣势
毋庸置疑,动态语言带来的便捷是显而易见的,我们不需要关心变量的数据类型,因为在赋值的过程中,Python会动态的改变自己的结构。
由于Python动态语言的特性,一个变量可以被任何数据类型赋值,也造成了一个困扰,就是在读别人源码的时候,如果参数只写了一个arg
,那我们是不知道它具体是需要传递什么样类型的参数的。