Soy plenamente consciente de que pylint
otras herramientas de análisis estático no lo saben todo y, a veces, sus consejos deben ser desobedecidos. (Esto se aplica a varias clases de mensajes, no solo convention
s.)
Si tengo clases como
class related_methods():
def a_method(self):
self.stack.function(self.my_var)
class more_methods():
def b_method(self):
self.otherfunc()
class implement_methods(related_methods, more_methods):
def __init__(self):
self.stack = some()
self.my_var = other()
def otherfunc(self):
self.a_method()
Obviamente, eso es artificial. Aquí hay un mejor ejemplo, si lo desea .
Creo que este estilo se llama usando "mixins".
Al igual que otras herramientas, pylint
califica este código -21.67 / 10
, principalmente porque piensa more_methods
y related_methods
no tiene self
o atributos otherfunc
, stack
y my_var
porque sin ejecutar el código, aparentemente no puede ver related_methods
y more_methods
está mezclado implement_methods
.
Los compiladores y las herramientas de análisis estático no siempre pueden resolver el problema de detención , pero creo que este es ciertamente un caso en el que ver lo que hereda implement_methods
demostraría que esto es perfectamente válido, y eso sería algo muy fácil de hacer.
¿Por qué las herramientas de análisis estático rechazan este patrón OOP válido (creo)?
Ya sea:
Ni siquiera intentan verificar la herencia o
los mixins se desaniman en Python idiomático y legible
El # 1 es obviamente incorrecto porque si le pido pylint
que me cuente sobre una clase mía que hereda los unittest.TestCase
usos self.assertEqual
, (algo definido solo en unittest.TestCase
), no se queja.
¿Son los mixins antipáticos o desanimados?