Python 是什么让派林认为我的课是抽象的?
据我所知,Python(2.5.2)并不真正支持抽象类。为什么pylint抱怨这个类是“抽象类而不是引用?”它会对任何抛出了Python 是什么让派林认为我的课是抽象的?,python,pylint,Python,Pylint,据我所知,Python(2.5.2)并不真正支持抽象类。为什么pylint抱怨这个类是“抽象类而不是引用?”它会对任何抛出了NotImplementedError的类这样做吗 我每个类都有自己的文件,所以如果是这样的话,我想我别无选择,只能抑制这个消息,但我希望有其他方法可以解决这个问题 """Package Repository interface.""" class PackageRepository(object): """Package Repository interfac
NotImplementedError
的类这样做吗
我每个类都有自己的文件,所以如果是这样的话,我想我别无选择,只能抑制这个消息,但我希望有其他方法可以解决这个问题
"""Package Repository interface."""
class PackageRepository(object):
"""Package Repository interface."""
def __init__(self):
self.hello = "world"
def get_package(self, package_id):
"""
Get a package by ID.
"""
raise NotImplementedError( \
"get_package() method has not been implemented")
def get_packages(self):
"""
Get all packages.
"""
raise NotImplementedError( \
"get_packages() method has not been implemented")
def commit(self):
"""
Commit all changes.
"""
raise NotImplementedError( \
"commit() method has not been implemented")
def do_something(self):
"""
Doing something.
"""
return self.hello
编辑 也许我应该澄清一下。我意识到这是一个抽象类,我很想使用abstract关键字,但据我所知,在Python中这一切都无关紧要(至少在我目前使用的版本中是如此),所以我没有费心做任何有趣的抽象技巧(像这样),只是把它忽略了
我很惊讶地看到pylint发现这是一个抽象类。是什么使pylint确定这是一个抽象类?它只是在寻找被扔到某个地方的
NotImplementedError
吗?根据我的经验,pylint有点过于热心,在关闭一些警告之前并没有用处。FWIW,引发NotImplementedError足以让pylint认为这是一个抽象类(这是绝对正确的)。来自logilab.org/card/pylintfeatures:W0223:方法%r在类%r中是抽象的,但当抽象方法(即raise NOTEImplementedError)在具体类中未被重写时,不会被重写使用2小时前的托比斯克是什么让你说它不是抽象的?它肯定不能按原样使用。它为每个方法函数抛出异常。如果这不是一个例子,你所说的“抽象”是什么意思?@Beau Simensen:为什么你只关注每个文件的一个类。那不是蟒蛇式的。事实上,这是你问题的根本原因。没有人(尤其不是pylint)希望每个文件有一个类。你为什么这样做?请更新您的问题,并解释为什么要这样做。FWIW,引发NotImplementedError足以让pylint认为这是一个抽象类(这是绝对正确的)。from:W0223:方法%r在类%r中是抽象的,但当抽象方法(即raise NOTEImplementedError)在具体类中未被重写时,不会被重写。Tobiesque有正确的答案…现在只要他将其作为答案发布即可:就Pylint文档而言,PTobiesque有正确的答案,但是,如果一个类有一个引发抽象类的方法,那么这个类又是以什么奇怪的方式实现的呢?您仍然可以实例化该类(这就是为什么您将raisenotimplementederror
而不是pass
作为方法体),因此将任何此类类称为“抽象”似乎是一个可怕的延伸。这完全没有意义,尤其是现在(在2.6+版本中)Python确实支持。这样我就可以删除这个答案而代之以你的答案。这可能有点太多了。例如,我使用abc
模块中的好东西来定义抽象类和方法,我使用NotImplementedError
来定义尚未实现的东西。您建议关闭哪些警告?