Python中的方法重载

时间:2020-01-09 10:44:19  来源:igfitidea点击:

在这篇文章中,我们将了解Python中的方法重载如何工作。

什么是方法重载

方法重载也是一种面向对象的编程概念,它指出在一个类中,我们可以具有两个或者更多个具有相同名称的方法,其中方法的类型或者传递的参数数量不同。

Python中的方法重载

方法重载在Python中是不支持的。在Python中,如果我们尝试重载方法,则不会出现任何编译时错误,而只会识别最后定义的方法。调用任何其他重载方法都会在运行时导致错误。

例如,以下是一个类定义,其中包含两个重载方法,一个带有2个参数,另一个带有3个参数。

class OverloadExample:
    # sum method with two parameters
    def sum(self, a, b):
        s = a + b
        print('Sum is:', s)

    # overloaded sum method with three parameters
    def sum(self, a, b, c):
        s = a + b + c
        print('Sum is:', s)

obj = OverloadExample()
obj.sum(1,2,3)
obj.sum(4, 5)

输出:

Sum is: 6
Traceback (most recent call last):
  File "F:/theitroad/Python/Programs/Overload.py", line 15, in 
    obj.sum(4, 5)
TypeError: sum() missing 1 required positional argument: 'c'

如我们所见,带有3个参数的方法是最后一个,因此可以调用,但是调用具有两个参数的sum方法会导致错误。

如何在Python中实现方法重载

如果要用Python编写可以使用不同数量的参数的方法或者模拟方法重载,则可以在Python中使用默认参数或者可变长度参数。

1.使用默认参数

在此,将None关键字指定为默认值。

class OverloadExample:
    # sum method with default as None for parameters
    def sum(self, a=None, b=None, c=None):
        # When three params are passed
        if a is not None and b is not None and c is not None:
            s = a + b + c
            print('Sum is:', s)
        # When two params are passed
        elif a is not None and b is not None:
            s = a + b
            print('Sum is:', s)

obj = OverloadExample()
obj.sum(1, 2, 3)
obj.sum(4, 5)

输出:

Sum is: 6
Sum is: 9

2.使用变长参数

我们可以使用可变长度参数,该参数可以接受不同数量的值。

class OverloadExample:
    def sum(self, *args):
        s = 0
        for num in args:
            s += num
        print('Sum is:', s)

obj = OverloadExample()
obj.sum(1, 2, 3)
obj.sum(4, 5)

输出:

Sum is: 6
Sum is: 9