【问题标题】:Cunfusion with method overloading in python? [closed]对python中的方法重载感到困惑? [关闭]
【发布时间】:2013-12-05 08:35:35
【问题描述】:

我是 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"

请解释一下上面的代码。

【问题讨论】:

标签: python python-2.7 overloading


【解决方案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)

【讨论】:

    【解决方案2】:

    Python 不支持方法重载。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 2023-03-17
      • 2013-07-27
      • 1970-01-01
      • 2016-02-21
      • 2016-09-04
      • 2012-05-03
      相关资源
      最近更新 更多