w Pythonie 2.x, gdy chcesz oznaczyć metodę jako abstrakcyjne, można określić ją tak:Odpowiednik NotImplementedError na polach w Pythonie
class Base:
def foo(self):
raise NotImplementedError("Subclasses should implement this!")
Następnie, jeśli zapomni się go zastąpić, dostaniesz miły wyjątek przypomnienia. Czy istnieje równoważny sposób oznaczania pola jako abstrakcyjnego? Czy jest to stwierdzenie w klasie docstring, co możesz zrobić?
Początkowo myślałem, że mogę ustawić pole Nieemplementowane, ale kiedy spojrzałem w górę, do czego służy (porównanie bogate), wydawało się to nadużyciem.
Nadal działa, nawet jeśli pierwotnym zamiarem było bogate porównywanie. Co jest z tym nie tak? –
Pierwszy problem polega na tym, że możesz odczytać pole z obiektu (myvar = Base.field), a następnie dowiedzieć się, że nie są one wdrażane w dowolnym miejscu, dopóki inna część nie spróbuje go użyć i otrzyma tajemniczy AttributeError. – Kiv
Drugi problem polega na tym, że IMO utrudnia czytelność ("Co tam robi to porównanie? Czy coś mi umknęło?) Rozwiązanie Evan dokładnie wyjaśnia, co się dzieje w znajomym stylu. – Kiv