Python 简明教程
Python - Method Overloading
Method overloading 是面向对象编程的一个特性,其中一个类可以拥有多个方法,这些方法具有相同名称但不同的参数。要重载方法,我们必须更改参数数量或参数类型,或同时更改这两项。
Method Overloading in Python
不同于其他编程语言如 Java、C++ 和 C#,Python 并不默认支持方法重载功能。但有替代方法可以实现它。
Example
如果你像下面的代码中所示那样定义多个方法,则后一个定义会覆盖前一个。因此,这种在 Python 中实现方法重载的方法会产生错误。
class example:
def add(self, a, b):
x = a+b
return x
def add(self, a, b, c):
x = a+b+c
return x
obj = example()
print (obj.add(10,20,30))
print (obj.add(10,20))
在使用三个参数首次调用 add() 方法时成功。但是,在使用两个参数调用 add() 方法(如在类中定义的那样)时失败。
60
Traceback (most recent call last):
File "C:\Users\user\example.py", line 12, in <module>
print (obj.add(10,20))
^^^^^^^^^^^^^^
TypeError: example.add() missing 1 required positional argument: 'c'
输出会告诉你 Python 仅考虑对 add() 方法的最新定义,而丢弃较早的定义。
要模拟方法重载,我们可以使用变通方法,即将方法参数的默认值定义为 None,这样便可以使用一个、两个或三个参数。
Example
下面的示例展示了如何实现 Python 中的方法重载 −
class example:
def add(self, a = None, b = None, c = None):
x=0
if a !=None and b != None and c != None:
x = a+b+c
elif a !=None and b != None and c == None:
x = a+b
return x
obj = example()
print (obj.add(10,20,30))
print (obj.add(10,20))
它将生成以下 output −
60
30
通过这种方法,我们能够在 Python 类中加入方法重载。
Implement Method Overloading Using MultipleDispatch
Python 的标准函数库没有其他用于实现方法重载的规定。但是,我们可以从一个名为 MultipleDispatch 的第三方模块中使用一个分派函数。
首先,你需要使用以下命令安装 Multipledispatch 模块 −
pip install multipledispatch
此模块有一个 @dispatch 装饰器。它接受要重载至的方法需要传递的参数数量。使用 @dispatch 装饰器定义多个 add() 方法副本,如下所示 −