Что заставляет 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
РЕДАКТИРОВАТЬ
Возможно, я должен уточнить. Я понимаю, что это абстрактный класс, и я хотел бы использовать ключевое слово abstract, но, насколько я понимаю, в Python это не имеет значения (по крайней мере, в версии, которую я сейчас использую), поэтому я не стал делать какие-то забавные абстрактные трюки (как те, которые найдены здесь) и просто не учел.
Я был удивлен, увидев, что Pylint осознает тот факт, что это абстрактный класс сам по себе. Что заставляет Pylint определить, что это абстрактный класс? Это просто ищет NotImplementedError
быть брошенным куда-нибудь?
2 ответа
FWIW, поднятие NotImplementedError достаточно, чтобы заставить pylint думать, что это абстрактный класс (что абсолютно правильно). from logilab.org/card/pylintfeatures: W0223: Метод%r является абстрактным в классе%r, но не переопределяется. Используется, когда абстрактный метод (то есть, вызывает NotImplementedError) не переопределяется в конкретном классе. - Tobiesque 2 часа назад
По моему опыту, Pylint немного чрезмерно усердствует и бесполезен, пока вы не отключите ряд предупреждений.