Łuk*_*ski 8 python pylint python-2.x python-2.7
请考虑以下代码段:
class AbstractClass(object):
def method1(self):
raise NotImplementedError()
def method2(self):
raise NotImplementedError()
class SemiConcreteClass(AbstractClass):
def method1(self):
return True
class ConcreteClass(SemiConcreteClass):
def method2(self):
return True
Run Code Online (Sandbox Code Playgroud)
使用默认的config(pylint classes.py)运行对此文件的检查会产生一些丢失的文档字符串(让我们忽略它们)和此警告:
W:8,0:方法'method2'在类'AbstractClass'中是抽象的但是没有被覆盖(abstract-method)
我知道SemiConcreteClass其实是抽象的,应该被分类以便使用,我不希望Pylint报告它.如何配置Pylint将这些类视为另一个抽象类?类名称,类所在的模块的命名约定 - 所有这些解决方案都没问题.
我知道我可以通过# pylint: disable=abstract-method评论明确地在课堂上保持警告.有更优雅的解决方案吗?
pylint 1.4.3,
astroid 1.3.6, common 0.63.2
Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)]
Run Code Online (Sandbox Code Playgroud)
Wol*_*lph 10
不幸的是,在这种情况下,pylint 不够智能,我个人只会禁用警告,因为ConcreteClass显然两者都实现了。另一种解决方案是SemiConcreteClass实现这两种方法,但这通常是您试图避免的。
我通常只使用Python 抽象基类代替Pylint 检查,它们会通知您未实现的方法。
例子:
#!/usr/bin/python
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def method1(self):
raise NotImplementedError()
@abc.abstractmethod
def method2(self):
raise NotImplementedError()
class SemiConcreteClass(AbstractClass):
def method1(self):
return True
SemiConcreteClass()
Run Code Online (Sandbox Code Playgroud)
结果是:
Traceback (most recent call last):
File "test.py", line 22, in <module>
SemiConcreteClass()
TypeError: Can't instantiate abstract class SemiConcreteClass with abstract methods method2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2981 次 |
| 最近记录: |