Python 派林:让它了解装饰师

Python 派林:让它了解装饰师,python,python-decorators,pylint,Python,Python Decorators,Pylint,派林似乎没有考虑到装饰者 我有一个这样的装饰师 @decorator def foo(arg1, arg2): pass 变成 def foo(arg2): pass 但派林一直抱怨我打电话给福的时候,我错过了一场辩论。我不希望禁用此警告,因为即使对于那些修饰过的函数,它也非常有用。有没有办法让它明白,伙计?如果你有这样的事情 def decorator(f): def wrapper(*args, **kwargs): return f(1, *ar

派林似乎没有考虑到装饰者

我有一个这样的装饰师

@decorator
def foo(arg1, arg2):
    pass
变成

def foo(arg2):
    pass

但派林一直抱怨我打电话给福的时候,我错过了一场辩论。我不希望禁用此警告,因为即使对于那些修饰过的函数,它也非常有用。有没有办法让它明白,伙计?

如果你有这样的事情

def decorator(f):
    def wrapper(*args, **kwargs):
        return f(1, *args, **kwargs)
    return wrapper

@decorator
def z(a, b):
    return a + b

print( z(5) )
一个不需要对代码进行太多更改的简单解决方案是忘记@,这只是语法上的糖分。它对我有用

def z(a, b):
    return a + b
z = decorator(z)

print( z(5) )
这是一个已知的问题:

当它保持未修复状态时,除了禁用使用
#pylint:disable=missing kwoa
的检查之外,您唯一的选择是通过以下方式解决问题:

  • 正如波尔库建议的那样,不使用
    @decorator
    语法;或
  • 不让装饰者更改函数签名;或
  • 提供默认值,即使它从未使用过或引发异常

  • 或者,4。为pylint项目贡献一个补丁

    但这样的警告就不会消失了吗?如果它能理解我的意思。假设不是这样。你是说使用
    foo('one-argument')
    的代码被标记为无效,因为修饰符传入了额外的参数?如果我写
    foo('bar'))
    它将
    'bar'
    解释为
    arg1
    ,并抱怨
    缺少参数arg2
    。这很好,还解决了autospec的模拟问题。对丑陋的语法感到羞耻。