Python 方法重载

Python 方法重载

方法重载是面向对象编程的一个重要特性。Java、C++、C#语言都支持方法重载,但是在Python中不能进行方法重载。

当一个类中有一个方法的名称定义了不止一次,但是参数类型和/或返回类型不同,这就是方法重载的情况。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来使用一个、两个或三个参数。

示例

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))

它将产生以下结果 输出

60
30

通过这种解决方案,我们可以在Python类中实现方法重载。

Python的标准库没有其他关于实现方法重载的规定。然而,我们可以使用来自名为Multipledispatch的第三方模块的分发函数来实现这个目的。

首先,您需要安装Multipledispatch模块。

pip install multipledispatch

该模块使用@dispatch装饰器。它接受要传递给要进行重载的方法的参数数量。定义多个带有@dispatch装饰器的add()方法的副本,如下所示−

示例

from multipledispatch import dispatch
class example:
   @dispatch(int, int)
   def add(self, a, b):
      x = a+b
      return x
   @dispatch(int, int, int)
   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))

输出

当您执行此代码时,将产生以下输出结果−

60
30

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程