据我了解,Python(2.5.2)并不真正支持抽象类。为什么pylint抱怨这个类是“抽象类而不是引用?”是否会对任何有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
修改
也许我应该澄清一下。我意识到这是一个抽象类,我很乐意使用抽象关键字,但据我所知,它在Python中并不重要(至少在我目前使用的版本中)所以我没有做任何有趣的抽象技巧(就像那些found here)一样,只是把它留下来。
我很惊讶地发现pylint已经认识到这是一个抽象类本身。是什么让pylint确定这是一个抽象类?它只是在寻找NotImplementedError
被抛出的地方吗?
答案 0 :(得分:12)
FWIW,提出NotImplementedError就足以让pylint认为这是一个抽象类(绝对正确)。来自logilab.org/card/pylintfeatures:W0223:方法%r在类%r中是抽象的但未被覆盖在具体类中未覆盖抽象方法(即引发NotImplementedError)时使用。 - Tobiesque 2小时前
答案 1 :(得分:1)
根据我的经验,pylint有点过于热心,在你关闭了一些警告之前没有用。