Jak rozumiem, Python (2.5.2) nie ma prawdziwej obsługi klas abstrakcyjnych. Dlaczego pylin narzeka, że ta klasa jest "klasą abstrakcyjną, a nie referencją?" Czy zrobi to dla każdej klasy, która ma wyrzuconą NotImplementedError
?Co sprawia, że pylin myśli, że moja klasa jest abstrakcyjna?
Mam każdą klasę w swoim pliku, więc jeśli tak jest, to sądzę, że nie mam innego wyjścia, jak tylko stłumić tę wiadomość, ale mam nadzieję, że jest inny sposób.
"""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
EDIT
Może powinienem wyjaśnić. Zdaję sobie sprawę, że jest to klasa abstrakcyjna i chciałbym użyć słowa kluczowego abstract, ale jak rozumiem, nie ma to znaczenia w Pythonie (przynajmniej w wersji, której aktualnie używam), więc nie zawracałem sobie głowy robieniem zabawnych abstrakcyjnych sztuczek (jak te found here) i po prostu go pominięto.
Zaskoczyło mnie, że pylinta podchodzi do faktu, że jest to klasa abstrakcyjna sama. Co decyduje o tym, że pylint jest klasą abstrakcyjną? Czy po prostu szuka gdzieś rzuconego NotImplementedError
?
Co sprawia, że mówisz, że to nie ** streszczenie? Na pewno nie można go używać w obecnej postaci. Zgłasza wyjątki dla każdej funkcji metody. Co rozumiesz przez "streszczenie", jeśli nie jest to przykład? –
To jest mylące dla mnie, że Python nie obsługuje klas abstrakcyjnych, ale pylint będzie narzekał, jeśli jest zdefiniowany, ale nie jest wymieniony w tym samym pliku. Zastanawiam się, czy robię coś złego, które uruchamia to ostrzeżenie. Wolę mieć wszystkie moje klasy we własnych plikach, więc jestem zobowiązany do natknięcia się na to często i chciałbym się dowiedzieć, czy jest coś, co powinienem robić więcej Python, który pomógłby mi obejść to ostrzeżenie. –
@Beau Simensen: Dlaczego koncentrujesz się na jednej klasie na plik. To bardzo nie-Pythoniczne. Rzeczywiście, to jest podstawowa przyczyna twojego problemu. Nikt (szczególnie nie pylint) nie spodziewa się jednej klasy na plik. Dlaczego robisz to w ten sposób? Zaktualizuj swoje pytanie, wyjaśniając, dlaczego to robisz. –