Ho usato classi astratte in Python con ABCMeta
. Quando scrivi un metodo astratto lo tagghi con il decoratore @abstractmethod
. Una cosa che ho trovato strano (e diverso dalle altre lingue) è che quando la sottoclasse sovrascrive il metodo della superclasse, non viene fornito alcun decoratore come @override
. Qualcuno sa quale potrebbe essere la logica dietro a questo?Perché no @override decorator in Python per facilitare la leggibilità del codice?
Ciò rende leggermente confuso chi legge il codice per stabilire rapidamente quali metodi eseguono l'override/implementano metodi astratti rispetto a metodi che esistono solo nella sottoclasse.
Perché dovresti fornire un decoratore? Un decoratore ti offre l'opportunità di sostituire una funzione con un nuovo oggetto, ma non c'è bisogno di farlo in Python poiché cerca i nomi di una classe dinamicamente (ad esempio l'associazione tardiva), cercando tra le classi in Method Resolution Order (MRO). ogni volta. Pertanto, un metodo definito in una sottoclasse maschera un metodo in una classe genitore * naturalmente *. –
E l'* obiettivo * dei metodi astratti è di assicurare che siano implementati; non è possibile creare un'istanza di una classe con metodi astratti ancora presenti. Non per loro essere distinti dagli altri metodi. –
@MartijnPieters stesso comportamento (MRO) è applicato in Java. L'annotazione '@ Override' è semplicemente per aiutare lo sviluppatore a catturare errori di battitura durante la compilazione (se il nome del metodo è errato, ad esempio). – alfasin