Что заставляет pylint думать, что мой класс абстрактен?

Насколько я понимаю Python (2.5.2) не имеет реальной поддержки абстрактных классов. Почему pylint жалуется на этот класс, являющийся "Абстрактным классом не ссылка?" Это сделает это для какого-либо класса, который имеет NotImplementedError брошенный?

У меня есть каждый класс в его собственном файле так, если это верно, я предполагаю, что у меня нет выбора, кроме как подавить это сообщение, но я надеюсь, что существует, возможно, иначе вокруг этого.

"""Package Repository interface."""


class PackageRepository(object):
    """Package Repository interface."""

    def __init__(self):
        self.hello = "world"

    def get_package(self, package_id):
        """
        Get a package by ID.
        """
        raise NotImplementedError( \
                "get_package() method has not been implemented")

    def get_packages(self):
        """
        Get all packages.
        """
        raise NotImplementedError( \
                "get_packages() method has not been implemented")

    def commit(self):
        """
        Commit all changes.
        """
        raise NotImplementedError( \
                "commit() method has not been implemented")

    def do_something(self):
        """
        Doing something.
        """
        return self.hello

Править

Возможно, я должен разъясниться. Я понимаю, что это - абстрактный класс, и я хотел бы использовать абстрактное ключевое слово, но насколько я понимаю ничего подобного не имеет значения в Python (по крайней мере, в версии, которую я в настоящее время использую), таким образом, я не потрудился делать любые забавные абстрактные приемы (как найденные здесь) и просто пропустил его.

Я был удивлен видеть, что pylint берет на том, что это - абстрактный класс самостоятельно. Что заставляет pylint решить, что это - абстрактный класс? Это просто ищет NotImplementedError будучи брошенным где-нибудь?

5
задан Beau Simensen 30 December 2009 в 19:52
поделиться

2 ответа

По моему опыту, pylint немного переусердствовал, и не будет полезен, пока вы не отключите ряд предупреждений.

1
ответ дан 18 December 2019 в 14:47
поделиться

FWIW, подняв NotImplementedError, достаточно заставить pylint думать, что это абстрактный класс (что абсолютно верно). из logilab.org/card/pylintfeatures: W0223: Метод %r является абстрактным в классе %r, но не переопределяется Используется, когда абстрактный метод (т.е. поднимает NotImplementedError) не переопределяется в конкретном классе. - Тобеск 2 часа назад

12
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: