为什么pycharm建议将方法更改为static
新的pycharm版本(3.1.3社区版)建议将不适用的方法与当前对象的状态转换为静态。
这有什么实际的原因? 某种微型性能(或内存)优化?
PyCharm“认为”你可能想要一个静态方法,但你忘记声明它是静态的。
PyCharm提出这一点是因为该方法在其主体中不使用self
,因此实际上并没有改变类实例。 因此,该方法可以是静态的,即可以调用而不需要以前创建类实例。
同意@jolvi,@AndndasR和其他人,警告发生在不使用self
的成员函数上。
如果你确定PyCharm是错误的,那函数不应该是@staticmethod
,如果你的值为零,你可以让这个函数离开两种不同的方式:
解决方法#1
def bar(self):
self.is_not_used()
doing_something_without_self()
def is_not_used(self):
pass
解决方法#2 [谢谢@DavidPärsson]
# noinspection PyMethodMayBeStatic
def bar(self):
doing_something_without_self()
我为此的应用程序(我不能使用@staticmethod的原因)是为了响应协议子类型字段而创建一个处理函数表。 所有的处理程序必须是相同的形式(静态或非静态)。 但有些人并没有对这个实例做任何事情。 如果我让这些静态我会得到“TypeError:'staticmethod'对象不可调用”。
为了支持OP的惊愕,建议你尽可能地添加静态方法,违背了这样一个原则,即稍后让代码变得更加容易,而不是更加简化 - 使静态变得更简单,因为你可以调用class.f()而不是instance.f()。
猜想为什么这个警告存在:
我可以想象将类方法定义为静态方法的优点:
如果存在的话,剩余的优势可能是微乎其微的: