Estou plenamente ciente de que pylint
outras ferramentas de análise estática não são oniscientes e, às vezes, seus conselhos devem ser desobedecidos. (Isso se aplica a várias classes de mensagens, não apenas a convention
s.)
Se eu tiver aulas 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, isso é artificial. Aqui está um exemplo melhor, se você quiser .
Eu acredito que esse estilo é chamado usando "mixins".
Como outras ferramentas, pylint
classifica esse código em -21.67 / 10
, principalmente porque ele pensa more_methods
e related_methods
não tem self
ou atributos otherfunc
, stack
e my_var
porque sem executar o código, ele aparentemente não pode ver related_methods
e more_methods
está misturado implement_methods
.
Compiladores e ferramentas de análise estática nem sempre podem resolver o Problema da Parada , mas acho que esse é certamente um caso em que analisar o que é herdado por implement_methods
mostraria que isso é perfeitamente válido e que seria uma coisa muito fácil de fazer.
Por que as ferramentas de análise estática rejeitam esse padrão OOP válido (eu acho)?
Ou:
Eles nem tentam verificar a herança ou
mixins são desencorajados em Python idiomático e legível
O número 1 está obviamente incorreto, porque se eu pedir pylint
para me contar sobre uma classe minha que herda unittest.TestCase
esse uso self.assertEqual
(algo definido apenas em unittest.TestCase
), ela não reclama.
Os mixins são antitônicos ou desencorajados?