Насколько я понимаю 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
будучи брошенным где-нибудь?
По моему опыту, pylint немного переусердствовал, и не будет полезен, пока вы не отключите ряд предупреждений.
FWIW, подняв NotImplementedError, достаточно заставить pylint думать, что это абстрактный класс (что абсолютно верно). из logilab.org/card/pylintfeatures: W0223: Метод %r является абстрактным в классе %r, но не переопределяется Используется, когда абстрактный метод (т.е. поднимает NotImplementedError) не переопределяется в конкретном классе. - Тобеск 2 часа назад