5

据我了解,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

编辑

也许我应该澄清一下。我意识到这是一个抽象类,我很想使用 abstract 关键字,但据我所知,这在 Python 中都不重要(至少在我目前使用的版本中),所以我没有费心去做任何有趣的抽象技巧(就像那些在这里找到的),只是把它排除在外。

我很惊讶地看到 pylint 发现它本身就是一个抽象类。是什么让 pylint 确定这是一个抽象类?它只是想NotImplementedError被扔到某个地方吗?

4

2 回答 2

12

FWIW,提高 NotImplementedError 足以让 pylint 认为这是一个抽象类(这是绝对正确的)。来自 logilab.org/card/pylintfeatures:W0223:方法 %r 在类 %r 中是抽象的,但未被覆盖在具体类中未覆盖抽象方法(即 raise NotImplementedError)时使用。– Tobiesque 2 小时前

于 2009-12-30T22:10:12.443 回答
1

根据我的经验,pylint 有点过分热心,并且在您关闭许多警告之前没有用。

于 2009-12-30T20:23:09.537 回答