我完全意识到,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()
显然,这是人为的。如果您愿意,这是一个更好的示例。
我相信使用“ mixins”来称呼这种风格。
像其他工具,pylint
利率这个代码的-21.67 / 10
,主要是因为它认为more_methods
并related_methods
没有self
或属性otherfunc
,stack
,annd my_var
因为没有运行的代码,它显然不能看到related_methods
和more_methods
在混合中implement_methods
。
编译器和静态分析工具不能总是解决Halting问题,但是我认为这确实是一种情况,其中查看继承者的内容implement_methods
将证明这是完全有效的,并且这很容易做到。
为什么静态分析工具会拒绝这种有效的(我认为)OOP模式?
要么:
他们甚至不尝试检查继承或
不鼓励在惯用且易读的Python中使用mixins
#1显然是不正确,因为如果我问pylint
告诉我的一类矿井的继承unittest.TestCase
使用 self.assertEqual
,(仅定义的东西unittest.TestCase
),它并没有抱怨。
mixins是unpythonic还是不鼓励使用?