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

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


当前回答

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

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

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

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

其他回答

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

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

my_player.attributes[item] 

而不是正确的方式

self.attributes[item]

这可能有点乱,但有时你只是不需要访问self,但你更喜欢将方法保留在类中,而不是使它静态。或者你只是想避免添加一堆难看的装饰器。这里有一些潜在的变通方法。

如果你的方法只有副作用,你不关心它返回什么:

def bar(self):
    doing_something_without_self()
    return self

如果你确实需要返回值:

def bar(self):
    result = doing_something_without_self()
    if self:
        return result

现在您的方法正在使用self,警告消失了!

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

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

与其在特定IDE中实现另一种方法来解决这个错误,不如使用下面的方法?PyCharm对这个实现没有任何建议。

class Animal:
    def __init__(self):
        print("Animal created")

    def eat(self):
        not self # <-- This line here
        print("I am eating")


my_animal = Animal()