我刚遇到以下问题:
我的方法看起来很像以下内容:
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)
答案 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)