Mir ist völlig bewusst, dass pylint
und andere statische Analysewerkzeuge nicht allwissend sind, und manchmal müssen ihre Ratschläge missachtet werden. (Dies gilt für verschiedene Nachrichtenklassen, nicht nur für convention
s.)
Wenn ich Unterricht haben möchte
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()
Offensichtlich ist das erfunden. Hier ist ein besseres Beispiel, wenn Sie möchten .
Ich glaube, dieser Stil wird "Mixins" genannt.
Wie bei anderen Tools wird pylint
dieser Code mit bewertet -21.67 / 10
, vor allem, weil er denkt more_methods
und related_methods
keine self
oder Attribute otherfunc
hat stack
, und my_var
weil er ohne Ausführung des Codes anscheinend nicht sehen kann related_methods
und darin more_methods
gemischt ist implement_methods
.
Compiler und statische Analysewerkzeuge können das Problem des Anhaltens nicht immer lösen , aber ich bin der Meinung, dass ein Blick auf das, was von geerbt implement_methods
wird, durchaus berechtigt ist, und das wäre sehr einfach.
Warum lehnen statische Analysetools dieses gültige (meiner Meinung nach) OOP-Muster ab?
Entweder:
Sie versuchen nicht einmal , die Vererbung zu überprüfen oder
Mixins werden in idiomatischem, lesbarem Python nicht empfohlen
Nr. 1 ist offensichtlich falsch, da ich pylint
mich nicht beschwere, wenn ich nach einer Klasse von mir frage , die unittest.TestCase
verwendet self.assertEqual
(etwas, das nur in definiert ist unittest.TestCase
) .
Sind Mixins unpythonisch oder entmutigt?