De acuerdo con @jolvi, @ArundasR y otros, la advertencia ocurre en una función miembro que no se usa self
.
Si está seguro de que PyCharm está equivocado, que la función no debería ser a @staticmethod
, y si valora las advertencias cero, puede hacer que esta desaparezca de dos maneras diferentes:
Solución # 1
def bar(self):
self.is_not_used()
doing_something_without_self()
def is_not_used(self):
pass
Solución # 2 [Gracias @ DavidPärsson ]
# noinspection PyMethodMayBeStatic
def bar(self):
doing_something_without_self()
La aplicación que tenía para esto (la razón por la que no podía usar @staticmethod) estaba en hacer una tabla de funciones de controlador para responder a un campo de subtipo de protocolo. Todos los manejadores tenían que ser de la misma forma (estática o no estática). Pero algunos no hicieron nada con la instancia. Si hiciera esos estáticos, obtendría "TypeError: el objeto 'staticmethod' no es invocable".
Para respaldar la consternación del OP, sugerirle que agregue un método estático siempre que pueda, va en contra del principio de que es más fácil hacer que el código sea menos restrictivo más tarde que hacerlo más: hacer un método estático lo hace menos restrictivo ahora, ya que puede llame a class.f () en lugar de instancia.f ().
Adivina por qué existe esta advertencia:
- Se anuncia métodoestático . Hace que los desarrolladores se den cuenta de algo que bien podrían haber pensado.
- Como señala @ JohnWorrall, llama su atención cuando el self queda fuera de la función sin darse cuenta .
- Es una señal para repensar el modelo de objetos; tal vez la función no pertenece a esta clase en absoluto.
self
algún lugar dentro del método? (Si la pregunta realmente es "¿por qué el diseño de los diseñadores de PyCharm esta manera ... vas a tener que pedirles, no tan ...)