Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是什么让派林认为我的课是抽象的?_Python_Pylint - Fatal编程技术网

Python 是什么让派林认为我的课是抽象的?

Python 是什么让派林认为我的课是抽象的?,python,pylint,Python,Pylint,据我所知,Python(2.5.2)并不真正支持抽象类。为什么pylint抱怨这个类是“抽象类而不是引用?”它会对任何抛出了NotImplementedError的类这样做吗 我每个类都有自己的文件,所以如果是这样的话,我想我别无选择,只能抑制这个消息,但我希望有其他方法可以解决这个问题 """Package Repository interface.""" class PackageRepository(object): """Package Repository interfac

据我所知,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
吗?

根据我的经验,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
来定义尚未实现的东西。您建议关闭哪些警告?