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

这有什么实际的原因?某种微观性能( - 或内存) - 优化?
jol*_*lvi 150
PyCharm"认为"你可能想要一个静态方法,但你忘了声明它是静态的.
PyCharm建议这样做,因为该方法不在其体内使用 self,因此实际上不会更改类实例.因此,该方法可以是静态的,即可以在不创建类实例之前调用.
Bob*_*ein 46
同意@ jolvi,@ ArundasR和其他人,警告发生在不使用的成员函数上self.
如果你确定PyCharm是错误的,那么该函数不应该是a @staticmethod,如果你重视零警告,你可以通过两种不同的方式使它消失:
解决方法#1
def bar(self):
self.is_not_used()
doing_something_without_self()
def is_not_used(self):
pass
Run Code Online (Sandbox Code Playgroud)
解决方法#2 [感谢@DavidPärsson ]
# noinspection PyMethodMayBeStatic
def bar(self):
doing_something_without_self()
Run Code Online (Sandbox Code Playgroud)
我为此所用的应用程序(我不能使用@staticmethod的原因)是创建一个处理函数表来响应协议子类型字段.所有处理程序必须是相同的形式(静态或非静态).但是有些人没有碰巧对这个实例做任何事情.如果我做了那些静态的我会得到"TypeError:'staticmethod'对象不可调用".
为了支持OP的惊愕,建议你尽可能地添加静态方法,违背以后更容易使代码更少限制的原则,而不是使其更多 - 使方法静态使其现在的限制性更小,因为你可以调用class.f()而不是instance.f().
猜测为什么存在此警告:
小智 11
我认为这个警告的原因是在Pycharm配置.您可以取消选中在编辑器 - >检查中选择方法可能是静态的
我可以想象将类方法定义为静态方法的优点:
如果存在,剩余的优势可能是微不足道的:
我同意此处给出的答案(方法未使用self,因此可以用修饰@staticmethod)。
我想补充一点,您可能希望将方法移至顶级函数,而不是将类中的静态方法移至该函数。有关详细信息,请参见此问题和可接受的答案:python-我应该使用静态方法还是顶层函数
将方法移至顶层函数也将修复PyCharm警告。
这可能有点混乱,但有时您只是不需要访问self,但您更愿意将该方法保留在类中而不是使其静态。或者您只是想避免添加一堆难看的装饰器。以下是针对这种情况的一些潜在解决方法。
如果您的方法只有副作用并且您不关心它返回什么:
def bar(self):
doing_something_without_self()
return self
Run Code Online (Sandbox Code Playgroud)
如果您确实需要返回值:
def bar(self):
result = doing_something_without_self()
if self:
return result
Run Code Online (Sandbox Code Playgroud)
现在您的方法正在使用self,并且警告消失了!
| 归档时间: |
|
| 查看次数: |
69512 次 |
| 最近记录: |