我有一个继承自collections.Counter
:
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
本身没有......
在这种情况下解决此警告的方法是什么?
答案 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
也是具体的,不需要实现此方法。