如果没有调用方法,Python会发出警告

假设您想在对象栏上调用方法foo,但在键入方法调用时,您会直观地将foo视为属性,并键入bar.foo而不是bar.foo()(带括号).现在,两者在语法上都是正确的,因此不会引发错误,但语义上非常不同.它已经好几次发生在我身上了(我在Ruby中的经历让它变得更糟)并且在长期和令人困惑的调试会话方面引起了我的极大关注.

有没有办法让Python解释器在这种情况下打印警告 – 每当你访问一个可调用的属性,但你实际上没有调用它?

为了记录 – 我考虑重写__getattribute__但是它很乱并且最终无法实现目标,因为函数调用via()发生在__getattribute__返回之后.

解决方法:

在所有情况下都无法做到这一点,因为有时您不想调用该方法,例如您可能希望将其存储为稍后要使用的可调用对象,例如callback = object.method.

但你可以使用静态分析工具,如pylint或PyCharm(我的推荐),如果你写一个看起来毫无意义的陈述,就会发出警告. object.method没有任何任务.

此外,如果您编写x = obj.get_x但是意味着get_x(),那么稍后当您尝试使用xa静态分析工具时可能会警告您(如果您很幸运)x是一个方法但是X的实例是预期.

上一篇:如果不是所有公共事物都是JavaDoc,如何强制编译警告?


下一篇:android – 为什么在布局背景中设置一个可绘制的形状会被警告?