Sono pienamente consapevole del fatto che pylint
e altri strumenti di analisi statica non sono onniscienti, e talvolta i loro consigli devono essere disobbediti. (Questo vale per varie classi di messaggi, non solo per convention
s.)
Se ho lezioni simili
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, è inventato. Ecco un esempio migliore, se vuoi .
Credo che questo stile sia chiamato "mixin".
Come altri strumenti, pylint
i tassi di questo codice -21.67 / 10
, in primo luogo perché pensa more_methods
e related_methods
non hanno self
o attributi otherfunc
, stack
, gustato my_var
, perché senza correre il codice, a quanto pare non può vedere related_methods
e more_methods
si mescolano-in a implement_methods
.
I compilatori e gli strumenti di analisi statica non possono sempre risolvere il problema dell'arresto , ma penso che questo sia certamente un caso in cui guardare ciò che è ereditato implement_methods
dimostrerebbe che questo è perfettamente valido e che sarebbe una cosa molto semplice da fare.
Perché gli strumenti di analisi statica rifiutano questo modello OOP valido (credo)?
O:
Non provano nemmeno a controllare l'eredità o
i mixin sono scoraggiati in Python idiomatico e leggibile
# 1 è ovviamente errato perché se chiedo pylint
di parlarmi di una mia classe che eredita unittest.TestCase
quell'uso self.assertEqual
(qualcosa definito solo in unittest.TestCase
), non si lamenta.
I mixin non sono ritonici o scoraggiati?