python - Pylint 在类中定义的装饰器上抛出不可调用
问题描述
我试图创建一个具有剩余时间属性的类并在其中执行函数减少了这个时间。这是代码
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
然后当我实例化类并do_something
像这样使用时:
test_class = TestClass()
test_class.do_something("param")
它按预期工作。但是,当我在代码上运行 pylint 时,出现错误:
pylint: not-callable / f is not callable
这是误报还是有更好的方法来编写此功能?
谢谢
解决方案
感谢您的评论。将方法移到类之外是必需的,因为 self 取决于方法的调用方式,而不是定义它的位置,因此不需要在类中定义装饰器即可访问 self:
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
推荐阅读
- node.js - 如何使用 Node.js 传递值以跳过和限制 MongoDB 的方法
- bash - shell脚本中的while循环错误
- javascript - 如何在移动设备上触发 Mousedown/Mouseup?
- amazon-web-services - rsa public key 没有这样的文件或目录?
- python - pandas.errors.ParserError:错误标记数据
- javascript - 什么是 Promise<{}>?
- node.js - 如何异步返回 sequelize 实例?
- c# - WPF 资源字体未更新
- ios - 使用 AudioKit 在 UIView 中绘制样本文件的波形
- c# - C#.net 字符串到 Int