Provengo da uno sfondo C# in cui la lingua ha alcune funzioni integrate di "protezione dello sviluppatore". Capisco che Python prende l'approccio "siamo tutti adulti qui" e attribuisce la responsabilità allo sviluppatore di codificarlo attentamente e con attenzione.Classi astratte di Python - come scoraggiare l'istanza?
Detto questo, Python suggerisce convenzioni come un trattino di sottolineatura principale per variabili di istanze private. La mia domanda è, c'è una particolare convenzione per marcare una classe come astratta oltre a specificarla solo nelle docstring? Non ho visto nulla in particolare nella guida di stile Python che menzioni le convenzioni di denominazione per le classi astratte.
posso pensare di 3 opzioni finora, ma non sono sicuro se sono buone idee:
- specificarlo nella docstring di sopra della classe (potrebbe essere trascurato)
- Utilizzare un leader sottolineatura nel nome della classe (non sicuro se questo è universalmente compreso)
- Creare un metodo
def __init__(self):
nella classe astratta che genera un errore (non è sicuro se questo influisce negativamente sull'ereditarietà, ad esempio se si desidera chiamare un costruttore di base)
Una di queste è una buona opzione o ce n'è una migliore? Voglio solo assicurarmi che gli altri sviluppatori sappiano che è astratto e quindi se tentano di istanziarlo devono accettare la responsabilità di qualsiasi comportamento strano.
Se sei preoccupato per qualcuno che chiama 'super .__ init__', o vuoi che faccia qualcosa ma non sia * direttamente * istantaneo, potresti avere qualcosa di simile in' Base .__ init__': 'se type (self) è Base: raise NotImplementedError ('Base .__ init __(): abstract class') ' –