Estou plenamente ciente de que pylintoutras 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 conventions.)
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, pylintclassifica esse código em -21.67 / 10, principalmente porque ele pensa more_methodse related_methodsnão tem selfou atributos otherfunc, stacke my_varporque sem executar o código, ele aparentemente não pode ver related_methodse more_methodsestá 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_methodsmostraria 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 pylintpara me contar sobre uma classe minha que herda unittest.TestCaseesse uso self.assertEqual(algo definido apenas em unittest.TestCase), ela não reclama.
Os mixins são antitônicos ou desencorajados?

