为什么Python不支持函数重载而其他语言大都支持
Python不支持函数重载主要有两点原因:一、python是一种动态语言;二、函数重载主要解决两个问题。在静态语言中,方法重载是希望类可以以统一的方式处理不同类型的数据提供可能。多个同名函数同时存在,具有不同的参数个数/类型,重载是一个类中多态性的一种表现。

一、 Python 是一种动态语言
在静态语言中,方法重载是希望类可以以统一的方式处理不同类型的数据提供可能。多个同名函数同时存在,具有不同的参数个数/类型,重载是一个类中多态性的一种表现。
Python 不支持函数重载是因为 Python 是一种动态语言,变量的类型是动态的,程序运行期间变量类型可以随意变化。由于 Python 的变量是没有固定类型的,而函数重载却依赖变量类型,重载就是定义多个同名函数,但这些同名函数的参数类型不同,传入不同类型的参数时执行与之对应的函数。因此,Python 不支持函数重载。
二、函数重载主要解决两个问题
- 可变参数类型
- 可变参数个数
另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。
1、可变参数类型
函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为 python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在 python 中很可能是相同的代码,没有必要做成两个不同函数。
2、可变参数个数
函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。
鉴于情况1跟情况2都有了解决方案,python 自然就不需要函数重载了。
延伸阅读
一、Python和其他语言的不同
Python 和其他语言的区别有很多,这里列举一些主要的区别:
Python 是一种解释型语言,而 C 和 C++ 是编译型语言。
Python 是一种动态类型语言,而 C 和 C++ 是静态类型语言。
Python 代码量相对较少,可读性较高,而 C 和 C++ 的代码量相对较多,可读性较低。
Python 的开发效率高,而 C 和 C++ 的开发效率相对较低。
Python 可以快速开发原型,而 C 和 C++ 需要更多的时间和精力来开发原型。
Python 有很多内置函数和库,可以快速完成很多任务,而 C 和 C++ 需要自己编写很多代码来完成同样的任务。
二、python中实现函数重载
函数重载指对一个同名的函数,可以传不同类型的参数,然后进行不同的操作。python默认不支持函数重载,因为下边的同名函数会覆盖上边的函数,但是我们可以借助functools中singledispatch实现python中的函数重载
示例:
from functools import singledispatch
class abs:
def type(self,args):
pass
class Person(abs):
@singledispatch
def type(self,args):
super().type(“”,args)
print(“我可以接受%s类型的参数%s”%(type(args),args))
@type.register(str)
def _(text):
print(“str”,text)
@type.register(tuple)
def _(text):
print(“tuple”, text)
@type.register(list)
@type.register(dict)
def _(text):
print(“list or dict”, text)
Person.type(“safly”)
Person.type((1,2,3))
Person.type([1,2,3])
Person.type({“a”:1})
Person.type(Person,True)
