Я полностью осознаю, что pylint
и другие инструменты статического анализа не являются всезнающими, и иногда их советам нужно не подчиняться. (Это относится к различным классам сообщений, а не только к convention
.)
Если у меня есть классы, такие как
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()
Очевидно, что это надумано. Вот лучший пример, если хотите .
Я считаю, что этот стиль называется использованием "mixins".
Как и другие инструменты, pylint
оценивает этот код -21.67 / 10
, в первую очередь потому, что он думает, more_methods
а related_methods
не имеет self
или имеет атрибуты otherfunc
, stack
и my_var
потому , что без запуска кода он, очевидно, не может видеть related_methods
и more_methods
смешиваться с ним implement_methods
.
Компиляторы и инструменты статического анализа не всегда могут решить проблему остановки , но я чувствую, что это, безусловно, тот случай, когда рассмотрение того, что унаследовано, implement_methods
показало бы, что это совершенно правильно, и это было бы очень легко сделать.
Почему инструменты статического анализа отклоняют этот допустимый (я думаю) шаблон ООП?
Или:
Они даже не пытаются проверить наследство или
миксин не рекомендуется в идиоматическом, читаемом Python
№ 1, очевидно, неверно, потому что, если я попрошу pylint
рассказать мне о моем классе, который наследует, unittest.TestCase
который использует self.assertEqual
(что-то определено только в unittest.TestCase
), он не будет жаловаться.
Миксины не пифоничны или не одобряются?