为什么pycharmbuild议将方法更改为static

新的pycharm版本(3.1.3社区版)build议将不工作的方法与当前对象的状态转换为静态。

在这里输入图像说明

这是什么原因? 某种微型性能(或内存)优化?

PyCharm“认为”你可能想要一个静态的方法,但是你忘了声明它是静态的。

PyCharm提出这个方法是因为这个方法在它的主体中不使用 self ,因此实际上并没有改变类的实例 。 因此,该方法可以是静态的,即可以调用,而不需要在之前创build类实例。

同意@jolvi,@AndndasR和其他人,警告发生在一个不使用self的成员函数。

解决方法:如果您确定PyCharm是错误的,那么该函数不应该是@staticmethod ,如果您的值为零,则可以使这个消息如下所示:

 def bar(self): self.is_not_used() doing_something_without_self() def is_not_used(self): pass 

我有这个应用程序(我不能使用@staticmethod)的原因是为了响应一个协议子types字段的处理函数。 所有的处理程序必须是相同的forms(静态或非静态)。 但是有些人并没有对这个事例做任何事情。 如果我做了这些静态我会得到“TypeError:”staticmethod“对象不可调用”。

为了支持OP的惊愕,build议你尽可能地添加静态方法,违背这样一个原则 ,即稍后让代码变得更加容易,而不是使它变得更加简单 – 使得静态方法使得它现在不那么严格,因为你可以调用class.f()而不是instance.f()。

猜测为什么这个警告存在:

  • 通告静态方法 。 它使开发人员意识到他们可能打算的东西。
  • 正如John Worrall指出的那样,当自我被无意中排除在function之外时,它会引起你的注意。
  • 这是重新思考对象模型的一个提示。 也许这个function根本不属于这个类。

我可以想象将类方法定义为静态方法的优点:

  • 你可以使用类名来调用方法,不需要实例化它。

如果存在的话,剩下的好处可能是微不足道的:

  • 可能会跑得快一点
  • 节省一点内存

我认为这个警告的原因是在Pycharm中的configuration。 您可以在编辑器 – >检查中取消选中方法可能是静态的

这个错误信息只是帮助了我,因为我没有意识到,我不小心使用我的testing示例播放器写我的function

 my_player.attributes[item] 

而不是正确的方式

 self.attributes[item] 

既然你没有在bar方法体中引用self ,PyCharm会问你是否想要使它成为静态的。 在像Java这样的其他编程语言中,声明静态方法有明显的原因。 在Python中,静态方法(AFIK)的唯一真正好处是可以在没有类的实例的情况下调用它。 但是,如果这是您唯一的原因,那么使用顶层函数可能会更好 – 如此处所述 。

总之,我不是百分百的确定它为什么在那里。 我猜他们可能会在即将发布的版本中删除它。

我同意在这里给出的答案(方法不使用self ,因此可以用@staticmethod装饰)。

我想补充一点,你可能想把这个方法移动到一个顶层的函数中,而不是在一个类中的静态方法。 有关详细信息,请参阅此问题和接受的答案: python – 我应该使用静态方法还是使用顶级函数

将方法移到顶层函数也会修复PyCharm警告。