【发布时间】:2015-10-16 19:52:24
【问题描述】:
我有一个这样的装饰器:
def auth(func):
def dec(self, *args):
user = Auth.auth(self.server.parse_params(), self.server.client_address)
// snip...
if user is None:
raise NoSuchUserError
func(self, *args, user=user)
return dec
效果很好,现在我可以编写如下函数:
@auth
def serve_account(self, user=None):
return json.dumps(user)
但有时我的函数实际上根本不读取user 参数,我只想让装饰器处理未经身份验证的用户。以此为例:
@auth
def serve_status(self, user=None):
// I get the status here but I don't use the user parameter.
return json.dumps(status)
现在我的 IDE 和我的静态代码分析服务一直在唠叨它:
未使用的参数“用户”
这也可能使不知道装饰器中发生了什么的人感到困惑:
TypeError: serve_status() got an unexpected keyword argument 'user'
我不能删除参数,否则一旦函数被装饰器调用,我会得到一个运行时错误。
如果函数在参数列表中没有参数,有什么方法可以省略装饰器中的参数? (除了创建第二个装饰器,如@auth_but_dont_pass_the_user)
【问题讨论】:
-
“我不使用用户参数”是指您没有在函数体或其他任何地方使用它吗?
-
@AshwiniChaudhary 是的,这正是我想说的。
标签: python function arguments python-decorators