W pełni zdaję sobie sprawę, że pylinti inne narzędzia analizy statycznej nie są wszechwiedzące, a czasem ich radom należy się nie posłuchać. (Dotyczy to różnych klas wiadomości, nie tylko conventions.)
Jeśli mam zajęcia takie jak
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()
Oczywiście jest to wymyślone. Oto lepszy przykład, jeśli chcesz .
Uważam, że ten styl nazywa się przy użyciu „miksów”.
Podobnie jak inne narzędzia, pylintocenia ten kod na -21.67 / 10, przede wszystkim dlatego, że myśli more_methodsi related_methodsnie ma selfatrybutów otherfunc, a także dlatego stack, my_varże bez uruchomienia kodu najwyraźniej nie widzi related_methodsi nie more_methodsjest w to zamieszany implement_methods.
Kompilatory i narzędzia do analizy statycznej nie zawsze mogą rozwiązać problem zatrzymania , ale uważam, że jest to z pewnością przypadek, w którym sprawdzenie, co odziedziczyłoby implement_methods, pokazałoby, że jest to całkowicie poprawne, i to byłoby bardzo łatwe.
Dlaczego narzędzia analizy statycznej odrzucają ten prawidłowy (myślę) wzór OOP?
Zarówno:
Nie próbują nawet sprawdzać dziedziczenia lub
mixiny są odradzane w idiomatycznym, czytelnym Pythonie
# 1 jest oczywiście niepoprawny, ponieważ jeśli poproszę pylinto powiedzenie mi o klasie, która dziedziczy, unittest.TestCaseże używa self.assertEqual((coś zdefiniowanego tylko w unittest.TestCase)), to nie narzeka.
Czy miksy są niepytoniczne czy zniechęcone?

