继承自 collections.Counter:'fromkeys' 是抽象的

Inherit from collections.Counter: 'fromkeys' is abstract

我有一个 python class 继承自 collections.Counter:

class Analyzer(collections.Counter):
   pass

当我在此代码上使用 pylint 时,它的答案是:

W: Method 'fromkeys' is abstract in class 'Counter' but is not overridden (abstract-method)

我检查了 collections.Counter 在我的机器上的实现,实际上,这个方法没有实现(评论有助于理解原因):

class Counter(dict):
    ...
    @classmethod
    def fromkeys(cls, iterable, v=None):
        # There is no equivalent method for counters because setting v=1
        # means that no element can have a count greater than one.
        raise NotImplementedError(
            'Counter.fromkeys() is undefined.  Use Counter(iterable) instead.')

但是,我真的不知道如何实现这个方法,如果Counter本身没有...

这种情况下有什么方法可以解决这个警告?

This question 应该在这里回答一些问题。基本上,pylint 检查引发的 NotImplementedError 异常以确定方法是否是抽象的(在本例中为误报)。添加注释 #pylint: disable=W0223 将禁用此检查。

this question也提出了类似的问题。

有两种不同的思维方式。

  • Counter 视为抽象的(如 pylint 所做的那样,如 所解释的)。然后,class Analyzer 必须实现 fromkeys 或者也是抽象的。但是,一个人不应该能够实例化 Counter.
  • Counter 视为具体的,即使您不能使用它的 fromkeys 方法。然后,必须禁用pylint的警告(因为在这种情况下是错误的,请参阅了解如何),并且class Analyzer也是具体的,不需要实现此方法.