空* args - python在这里做什么?

时间:2015-04-14 09:04:24

标签: python python-2.7

我刚遇到以下问题:

我的方法看起来很像以下内容:

def funfun(fun,args):
    fun(*args)

现在当传递的乐趣没有参数而args是一个空列表时,python会抱怨我通过了一个有趣的参数。这是为什么?在那种情况下通过了什么?

(在我的真实代码中,fun被称为fun(obj,* args)但实际上只需要一个参数,概念应该是相同的)

[编辑]

这是完整的代码:

def invoke(self, object_self, method, proceed, args):
    proxy_method = getattr(self.proxy, method.getName(), self.placeholder)
    if proxy_method == self.placeholder:
        return proceed.invoke(object_self,args)
    else:
        return proxy_method(object_self,*args)

1 个答案:

答案 0 :(得分:0)

这里的错误是我错误地认为proxy_method是未绑定的,需要将对象作为参数调用。除了object_self是错误的对象之外,getattr的结果实际上是绑定方法,绑定到代理实例,因此不需要传递代理对象。正确的代码是:

def invoke(self, object_self, method, proceed, args):
    proxy_method = getattr(self.proxy, method.getName(), self.placeholder)
    if proxy_method == self.placeholder:
        return proceed.invoke(object_self,args)
    else:
        return proxy_method(*args)