我想在类中定义一个装饰器。我不想将它定义为一个单独的、独立的函数,因为这个装饰器是专门针对这个类的,我想将相关的方法保留在一起。
这个装饰器的目的是检查一些先决条件,特别是成员变量持有的数据库连接、SSH连接等是否仍然可用。如果不是,则不会调用装饰函数,并且将完成一些错误报告和清理工作。
我做了以下测试类来测试它是否有效,代码确实运行良好。但我发现PyCharm对这段代码显示了警告。所以我想知道,这是否意味着我的代码不是Pythonic,或者PyCharm不够智能而错误地给出了这个警告?
如果我的代码不是 Pythonic,如何更改?
如果这是 PyCharm 的错误,我和我的团队应如何配置 PyCharm 以让它专门忽略此类警告,同时保留大多数其他 lint 检查?
class TestClass:
def __init__(self):
self.flag = True
def dec(func):
def wrapper(self, *args, **kwargs):
if not self.flag:
print("Won't run!")
return empty_fun(self, *args, **kwargs)
return func(self, *args, **kwargs)
def empty_fun(*args, **kwargs):
return None
return wrapper
@dec
def foo(self):
print("foo")
@dec
def bar(self, msg, more, *args, **kwargs):
print("message: %s" % msg)
print("more %s:" % more)
for item in args:
print("other item: %s" % item)
name = kwargs.get('name')
age = kwargs.get('age')
print('name: %s' % name)
print('age: %s' % age)
def main():
t = TestClass()
t.foo()
print('-'*10)
t.bar("abc", 'def', 'hij', 'klm', name='Tom', age=20)
if __name__ == '__main__':
main()
以下是 PyCharm 报告的 lint 警告: