新的pycharm发行版(3.1.3社区版)建议将不能处理当前对象状态的方法转换为静态方法。
这其中的实际原因是什么?某种微性能(或内存)优化?
新的pycharm发行版(3.1.3社区版)建议将不能处理当前对象状态的方法转换为静态方法。
这其中的实际原因是什么?某种微性能(或内存)优化?
当前回答
这可能有点乱,但有时你只是不需要访问self,但你更喜欢将方法保留在类中,而不是使它静态。或者你只是想避免添加一堆难看的装饰器。这里有一些潜在的变通方法。
如果你的方法只有副作用,你不关心它返回什么:
def bar(self):
doing_something_without_self()
return self
如果你确实需要返回值:
def bar(self):
result = doing_something_without_self()
if self:
return result
现在您的方法正在使用self,警告消失了!
其他回答
这个错误消息帮助了我很多,因为我没有意识到我不小心使用测试示例播放器编写了函数
my_player.attributes[item]
而不是正确的方式
self.attributes[item]
我认为这个警告的原因是在Pycharm中配置。 您可以取消勾选“编辑器->检查”中的“方法可能是静态的”
我可以想象将类方法定义为静态方法的以下优点:
您可以只使用类名调用方法,不需要实例化它。
其余的优势如果存在的话可能是微不足道的:
可能会跑得快一点 节省一点内存
我同意这里给出的答案(method不使用self,因此可以用@staticmethod装饰)。
我想补充一点,您可能希望将该方法移动到顶级函数,而不是类中的静态方法。有关详细信息,请参阅这个问题和公认的答案:python -我应该使用静态方法还是顶级函数
将该方法移动到顶级函数也将修复PyCharm警告。
与其在特定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()