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?
