Pylint 在 class 中定义的装饰器上抛出不可调用

Pylint throws not-callable on decorator defined within class

我正在尝试创建一个 class 剩余时间为 属性 并在其中执行功能以减少此时间。这是代码

class TestClass:
    def __init__(self):
        self.time_remaining = 240

    @staticmethod
    def time_taken(start):
        return (datetime.now() - start).seconds

    def with_timeout(f):
        @wraps(f)
        def wrapper(self, *args, **kwargs):
            start = datetime.now()
            result = f(self, *args, **kwargs)
            self.time_remaining = (
                self.time_remaining - TestClass.time_taken(start)
            )
            return result

        return wrapper

    @with_timeout
    def do_something(self, param):
        # DO Something

然后当我实例化 class 并像这样使用 do_something 时:

test_class = TestClass()
test_class.do_something("param")

它按预期工作。但是,当我在代码上 运行 pylint 时,出现错误:

pylint: not-callable / f is not callable

这是误报还是有更好的方法来编写此功能?

谢谢

感谢您的评论。将方法移到 class 之外是必需的,因为 self 的绑定取决于方法的调用方式,而不是定义方法的位置,因此装饰器不需要在 class 中定义访问自我:

def time_taken(start):
    return (datetime.now() - start).seconds

def with_timeout(f):
    @wraps(f)
    def wrapper(self, *args, **kwargs):
        start = datetime.now()
        result = f(self, *args, **kwargs)
        self.time_remaining = self.time_remaining - time_taken(start)
        return result

    return wrapper


class TestClass:
    def __init__(self):
        self.time_remaining = 240

    @with_timeout
    def do_something(self, param):
        # DO Something