混淆python中的方法重载?

时间:2013-12-05 08:35:36

标签: python python-2.7 overloading

我是python的新手。但我知道方法重载。但我对python中的重载感到困惑。这是我的混淆代码,

class OverLoad(object):
    """docstring for OverLoad"""
    def __init__(self, arg):
        super(OverLoad, self).__init__()
        self.arg = arg

    def adder(a, b):
        print a,b

    def adder(*a):
        print a

    def adder(a):

        print a
    def adder():

        print "no arg"

请解释上面的代码。

2 个答案:

答案 0 :(得分:1)

Python样式的重载:

def adder(self, *arg, **kwd):
你可以致电:

some_class.adder(1, 2)
some_class.adder(1, 2, 3, 4, 5, 6, 7, 9, 10 ....)
some_class.adder(1, 2, 3, 4, arg1=5, arg2=6, arg3=7)
some_class.adder(arg1=1, arg2=2, arg3=3)

但很可能是你的变种:

def adder(self, *arg):
    if len(arg) == 0:
       print "no arg"
    return sum(arg)

并致电:

some_class.adder(1,2,3,4,5,7,8,9,10)

答案 1 :(得分:0)

Python不支持方法重载。

请参阅此doc。在类中定义方法时,Python首先创建一个函数对象,然后绑定函数对象和您定义的函数名。因此,在您的代码示例中,只有最后一个 adder()函数生效。