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

时间:2017-06-14 12:27:21

标签: python inheritance abstract python-collections

我有一个继承自collections.Counter

的python类
class Analyzer(collections.Counter):
   pass

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

  

W:方法'fromkeys'在类'Counter'中是抽象的但是没有被覆盖(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本身没有......

在这种情况下解决此警告的方法是什么?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

有两种不同的思维方式。

  • Counter视为抽象(如pylint所做,如Jared所述)。然后,类Analyzer必须实现fromkeys或者也是抽象的。但是,人们不应该能够实现Counter
  • Counter视为具体,即使您无法使用其fromkeys方法。然后,必须禁用pylint的警告(因为在这种情况下它是错误的,请参阅Jared's answer知道如何),类Analyzer也是具体的,不需要实现此方法。