Наследовать от коллекций. Учредитель: 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 также является конкретным и не требует реализации этого метода.
Другие вопросы по тегам