为什么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警告。