为什么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()。

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

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

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

  • 你可以使用类名来调用方法,不需要实例化它。
  • 如果存在的话,剩余的优势可能是微乎其微的:

  • 可能会运行得更快一点
  • 节省一点内存
  • 链接地址: http://www.djcxy.com/p/55135.html

    上一篇: Why does pycharm propose to change method to static

    下一篇: Imitating a static method