据我了解,Python(2.5.2)并不真正支持抽象类。为什么 pylint 抱怨这个类是“抽象类而不是引用?”它会为任何具有以下功能的类执行此操作吗NotImplementedError
thrown?
我将每个类都放在自己的文件中,所以如果是这种情况,我想我别无选择,只能抑制此消息,但我希望也许有另一种方法可以解决它。
"""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
EDIT
也许我应该澄清一下。我意识到这是一个抽象类,我很想使用abstract关键字,但据我了解,这在Python中都不重要(至少在我当前使用的版本中),所以我没有费心做任何有趣的抽象技巧(像那些在这里找到)并简单地将其排除在外。
我很惊讶地发现 pylint 意识到这本身就是一个抽象类。是什么让 pylint 确定这是一个抽象类?难道只是单纯的寻找NotImplementedError
被扔到某个地方?
FWIW,引发 NotImplementedError 足以使 pylint 认为这是一个抽象类(这是绝对正确的)。来自 logilab.org/card/pylintfeatures:W0223:方法 %r 在类 %r 中是抽象的,但未被重写 当抽象方法(即 raise NotImplementedError)在具体类中未被重写时使用。 – 托比斯克 2 小时前
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)