Mir ist völlig bewusst, dass pylintund 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 conventions.)
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 pylintdieser Code mit bewertet -21.67 / 10, vor allem, weil er denkt more_methodsund related_methodskeine selfoder Attribute otherfunchat stack, und my_varweil er ohne Ausführung des Codes anscheinend nicht sehen kann related_methodsund darin more_methodsgemischt 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_methodswird, 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 pylintmich nicht beschwere, wenn ich nach einer Klasse von mir frage , die unittest.TestCaseverwendet self.assertEqual(etwas, das nur in definiert ist unittest.TestCase) .
Sind Mixins unpythonisch oder entmutigt?

