Python用类来写带参数的装饰器,碰到一个错误提示,不知是否Pycharm的BUG,但代码可正常运行


看到这个错误提示,我不知道是不是Pycharm的问题,还是我代码的问题,
但是 上图 这个代码,是可以正常执行,结果也是预期的正确,我把代码贴出来,大伙一起分析分析
import time
class GetExecTime:
def __init__(self, sec):
self.sec = sec
def __call__(self, func):
self.func = func
return self.wrapper
def wrapper(self, *args, **kwargs):
for i in range(self.sec):
print(f"距离函数执行还有{self.sec - i}秒钟")
time.sleep(1)
t1 = time.time()
result = self.func(*args, **kwargs)
t2 = time.time()
print(f"函数执行时间是:{t2 - t1}秒")
return result
@GetExecTime(2)
def myfunc(n):
k = 0
for i in range(n):
k = i
return k
if __name__ == '__main__':
r = myfunc(66)
关于 LearnKu
第一个写法, PyCharm 只知道
self.__call__返回一个类的属性self.wrapper, 以其属性来调用参数66, PyCharm 无法判断参数, 所以给了警告, 并不代表错误.第二种写法,
self.__call__返回的是一个函数wrapper, PyCharm 可以判断参数, 所以没有警告.避免的方法, 就是透过型别注释(Type Annotation) - 类型提示支持
Refer stackoverflow.com/questions/470601...