Я цілком усвідомлюю, що pylint
та інші інструменти статичного аналізу не є всезнаючими, і іноді їхні поради повинні бути не дотримані. (Це стосується різних класів повідомлень, а не лише convention
s.)
Якщо у мене є заняття на кшталт
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()
Очевидно, це надумано. Ось кращий приклад, якщо вам подобається .
Я вважаю, що цей стиль називають використанням "міксинів".
Як і інші інструменти, pylint
ставки цей код в -21.67 / 10
першу чергу тому , що він думає , more_methods
і related_methods
не мають self
або атрибути otherfunc
, stack
, annd my_var
бо без виконання коду, він , очевидно , не може бачити related_methods
і more_methods
змішують в до implement_methods
.
Компілятори та інструменти статичного аналізу не завжди можуть вирішити проблему зупинки , але я вважаю, що це, безумовно, випадок, коли дивлячись на те, що успадковано, implement_methods
було б показано, що це абсолютно вірно, і це було б дуже легко зробити.
Чому інструменти статичного аналізу відкидають цю дійсну (я думаю) схему OOP?
Або:
Вони навіть не намагаються перевірити спадщину чи
міксини відбиваються від ідіоматичного, читаного Python
№1, очевидно, неправильно, тому що якщо я попрошу pylint
сказати мені про мій клас, який успадковує, unittest.TestCase
який використовує self.assertEqual
, (щось визначене лише в unittest.TestCase
), він не скаржиться.
Чи міксини непітонічні чи не відсторонені?