Наследовать от коллекций. Учредитель: fromkeys является абстрактным
У меня есть класс Python, который наследуется от 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
само по себе не...
Как решить это предупреждение в этой ситуации?
2 ответа
Этот вопрос должен ответить на некоторые из вопросов здесь. В основном, Pylint проверяет NotImplementedError
Возникают исключения, чтобы определить, является ли метод абстрактным (в данном случае это ложноположительный результат). Добавление комментария #pylint: disable=W0223
отключит эту проверку.
Аналогичная проблема также поднимается в этом вопросе.
Существует два разных способа мышления.
- Рассматривать
Counter
как абстрактный (как Пилинт, как объяснил Джаред). Затем классAnalyzer
должен реализоватьfromkeys
или также быть абстрактным. Но тогда нельзя уметьCounter
, - Рассматривать
Counter
как конкретный, даже если вы не можете использовать егоfromkeys
метод. Затем, предупреждение Pylint должно быть отключено (так как в этом случае это неправильно, см . Ответ Джареда на kown how), и классAnalyzer
также является конкретным и не требует реализации этого метода.