Sono pienamente consapevole del fatto che pylint
e altri strumenti di analisi statica non sono onniscienti e talvolta il loro consiglio deve essere disobbedito. (Questo vale per varie classi di messaggi, non solo convention
s.)
Se ho classi come
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()
Ovviamente, è forzato. Ecco un esempio migliore, se ti piace .
Credo che questo stile sia chiamato usando "mixins".
Come altri strumenti, pylint
valuta questo codice a -21.67 / 10
, principalmente perché pensa more_methods
e related_methods
non hanno self
o attributi otherfunc
, stack
, annd my_var
perché senza eseguire il codice, a quanto pare non è possibile vedere related_methods
e more_methods
sono mescolati in implement_methods
.
I compilatori e gli strumenti di analisi statica non possono sempre risolvere il problema di interruzione , ma ritengo che questo sia certamente un che guardando ciò che viene ereditato da implement_methods
mostrerebbe che questo è perfettamente valido, e sarebbe una cosa molto semplice da fare.
Perché gli strumenti di analisi statica rifiutano questo modello OOP valido (credo)?
In entrambi:
-
Non riescono nemmeno provare a controllare l'ereditarietà o
-
i mixin sono scoraggiati in Python idiomatico e leggibile
# 1 è ovviamente errato perché se chiedo a pylint
di parlarmi di una mia classe che eredita unittest.TestCase
che usa self.assertEqual
, (qualcosa definito solo in unittest.TestCase
), non non lamentarsi.
I mixin sono unptoni o scoraggiati?