新的pycharm发行版(3.1.3社区版)建议将不能处理当前对象状态的方法转换为静态方法。

这其中的实际原因是什么?某种微性能(或内存)优化?


当前回答

这个错误消息帮助了我很多,因为我没有意识到我不小心使用测试示例播放器编写了函数

my_player.attributes[item] 

而不是正确的方式

self.attributes[item]

其他回答

由于在bar方法体中没有引用self,因此PyCharm询问您是否希望将bar设置为静态的。在其他编程语言(如Java)中,声明静态方法有明显的原因。在Python中,静态方法(AFIK)的唯一真正好处是能够在没有类实例的情况下调用它。但是,如果这是唯一的原因,那么最好使用顶级函数——如这里所述。

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

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

我想补充一点,您可能希望将该方法移动到顶级函数,而不是类中的静态方法。有关详细信息,请参阅这个问题和公认的答案:python -我应该使用静态方法还是顶级函数

将该方法移动到顶级函数也将修复PyCharm警告。

这个错误消息帮助了我很多,因为我没有意识到我不小心使用测试示例播放器编写了函数

my_player.attributes[item] 

而不是正确的方式

self.attributes[item]

PyCharm“认为”您可能想要一个静态方法,但您忘记将其声明为静态方法(使用@staticmethod装饰器)。

PyCharm建议这样做是因为该方法在其主体中没有使用self,因此实际上没有更改类实例。因此,该方法可以是静态的,即无需传递类实例或甚至无需创建类实例即可调用。

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

您可以只使用类名调用方法,不需要实例化它。

其余的优势如果存在的话可能是微不足道的:

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